实现触发对象并将其从画布中移除

时间:2014-02-07 01:02:34

标签: javascript canvas html5-canvas

我花了很多时间在这段代码上。它没有成功:(我有射击的船。我有外星人正在向船上移动!我想我的子弹得到一个外星人并从帆布中移除那个外星人(并且再次获得并移除所有外星人)我想到了坐标。我认为我必须将子弹的坐标与外星人的坐标进行比较。所以如果它们是相同的那么只需要制作黑色的外星人来帮助我实现"消失"然而,我试过了。它不起作用!有任何想法吗?任何帮助都会表示赞赏。谢谢。

JS

    Alien.prototype.draw = function(context) {
        if(this.x == 0) {
            context.fillStyle = "red";
        } else if(this.x == 1) {
            context.fillStyle = "yellow";
        } else {
            context.fillStyle = "blue";
        }
        context.beginPath();
        context.fillRect(this.posx, this.posy, 20 , 20);
        context.fill();
    }

        var canvas = document.getElementById("screen");
        context = canvas.getContext("2d");

        if (canvas.getContext) {

            //init the aliens array
            var aliens = [];
            for(var i = 0; i < 3; i++) {
                for(var j = 0; j < 3; j++) {
                    aliens.push(new Alien(j, i));
                }
            }

HTML

<canvas id="screen" width="300" height="500"/>

1 个答案:

答案 0 :(得分:0)

正如this(现已删除)问题已经回答:

您的setTimeout()调用中出现错误,导致shoot()方法无法调用。

不要使用括号作为setTimeout的函数参数 - 这应该只是一个参考。当您使用括号时,您实际上正在执行shoot()方法并将其结果提供给setTimeout()

试试这个,它可能会让你更进一步:

function shoot(){
    context.fillStyle = "black";
    context.fillRect(player.x, Y2--, 5,10);
    context.fillStyle = "red";
    context.fillRect(player.x, Y2, 5,10);
    if (Y2>=0) {
        timer=setTimeout(shoot, 1);    /// no parenthesis here
    }
    else {
        context.fillstyle="black";
        //  context.fillRect(X2, Y2, 5,10);
        Y2=320;
        // context.fillRect(X+23, Y2, 5,10);
    }
}

如果这只能部分解决您的问题,请更新您的问题,了解您尝试实现的更多信息和详细信息。