Spritesheet 没有为 HTML5 Canvas 设置动画

Posted

技术标签:

【中文标题】Spritesheet 没有为 HTML5 Canvas 设置动画【英文标题】:Spritesheet not animating HTML5 Canvas 【发布时间】:2020-09-09 19:15:00 【问题描述】:

一段时间以来,我一直在尝试让我的播放器制作动画,并且我已经阅读了多个教程,但我似乎无法做到这一点。我正在关注的教程位于:https://www.simplifiedcoding.net/javascript-sprite-animation-tutorial-html5-canvas/

我创建了一个组件类的播放器:

 mySprite = new component(168, 33, "Images/Run/character.png", 0, 0, "sprite");

然后我用更新函数创建组件类:

function component(width, height, color, x, y,type) 

  this.width = width;
  this.height = height;
  this.type = type;
  if (type == "image" || type == "background" || type == "sprite" ) 
    this.image = new Image();
    this.image.src = color;
  
  this.x = x;
  this.y = y;


  this.update = function()
  
  ctx = myGameArea.context;
  if (this.type == "sprite") 
     
     var curFrame = 0;
     curFrame = ++curFrame % 8; 
     var srcX =0;       
     srcX = curFrame * this.width /8; 
     ctx.drawImage(this.image,srcX,y,this.width/8,this.height,x,y,this.width/8,this.height);
     

  
  this.newPos = function() 
  
    this.gravitySpeed += this.gravity;
    this.x += this.speedX;
    this.y += this.speedY + this.gravitySpeed;
    this.hitBottom();
    this.jumpGravity();
    if (this.type == "background") 
      if (this.x == -(this.width)) 
        this.x = 0;
      
     


然后我在游戏循环中同时调用 update 和 newPos 函数:

mySprite.newPos();
  mySprite.update();

我希望有人能告诉我我做错了什么。

【问题讨论】:

【参考方案1】:

我在调试 curFrame 变量时注意到它没有递增。我通过使 curframe 成为组件类的变量并在游戏循环中直接使用 this.curFrame +=1; 递增它来解决这个问题。

【讨论】:

以上是关于Spritesheet 没有为 HTML5 Canvas 设置动画的主要内容,如果未能解决你的问题,请参考以下文章

无法导入 json spritesheet

Windows Phone 应用程序中的 SpriteSheet 动画

EaselJS spritesheet 动画在画布上不可见,但没有错误

显示 Spritesheet 的帧

在没有 JS 库的情况下在 <canvas> 上为 spritesheet 设置动画 [重复]

Silverlight 中的 Spritesheet