如何创建项目符号动画?(射击游戏)

How to create a bullet animation? (Shooter Game)

本文关键字:动画 射击游戏 符号 项目 创建 何创建      更新时间:2023-09-26

我正试图制作一款射击游戏,但我在子弹动画方面遇到了一些麻烦。每次单击时,都会创建一个新的项目符号对象并开始动画,但每次单击后,创建的项目符号都会消失,并且相同的项目符号会重新开始,这比以前的项目符号更快。所以我尝试在每次点击后创建新的项目符号。射击游戏的基本逻辑。这是我的代码:

    function newBullet(x,y,angle,speed,id,type) {
    this.x = x;
    this.y = y;
    this.speed = speed;
    this.angle = angle;
    this.radians = this.angle * Math.PI / 180;
    this.id = id;
    this.type = type;
    this.drawBullet = drawBullet;
    this.moveBullet = moveBullet;
    }
    function moveBullet() {
    this.x = this.x + Math.cos(this.radians) * this.speed ;
    this.y = this.y + Math.sin(this.radians) * this.speed;
    ctx.drawImage( bulletImg, this.x, this.y);
    }
    function drawBullet() {
        bullet = new newBullet(playerX,playerY,getAngle(),2,1,1);
        bullets[bullets.length] = bullet;
        setInterval("bullets[bullets.length - 1].moveBullet()", 25);
    }
canvas.addEventListener("mousedown",drawBullet,false);  

尝试在此处添加var

    var bullet = new newBullet(playerX,playerY,getAngle(),2,1,1);

如果要向数组添加项目符号,则应使用push。这将更新bullets.length:

function drawBullet() {
        var bullet = new newBullet(playerX,playerY,getAngle(),2,1,1);
        bullets.push(bullet);
        setInterval(bullets[bullets.length - 1].moveBullet, 25);
}

您创建的子弹消失的原因是:每次都替换bullets[0]。新子弹比旧子弹快,因为bullets[0].moveBullet在每25毫秒的间隔内被调用n次,其中n是你"创建"的子弹数。