首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CraftyJS:我不能用.onHit销毁实体

CraftyJS:我不能用.onHit销毁实体
EN

Stack Overflow用户
提问于 2015-01-10 05:53:10
回答 1查看 343关注 0票数 0

我和craftyJS有点问题。我造了一艘发射激光的飞船,但我希望当一个实体与它碰撞时,激光能摧毁它。我已经试过这样做了,但是不起作用。下面是我的代码:

代码语言:javascript
复制
Crafty.init(1340,650, document.getElementById('game'));
Crafty.defineScene("gameStart", function() {
function newAlien(){
    var random = Math.floor(Math.random() * 4) + 1;
    switch(random){
        case 1:
            var alien = Crafty.e("2D, DOM, Image, Collision")
                .image("alien1.png");
            alien.x = ship.x;
            alien.y = 20
            break;
        case 2:
            var alien = Crafty.e("2D, DOM, Image, Collision")
                .image("alien2.png");
            alien.x = ship.x;
            alien.y = 20;
            break;
        case 3:
            var alien = Crafty.e("2D, DOM, Image, Collision")
                .image("alien3.png");
            alien.x = ship.x;
            alien.y = 20;
            break;
        case 4:
            var alien = Crafty.e("2D, DOM, Image, Collision")
                .image("alien4.png");
            alien.x = ship.x;
            alien.y = 20;
            break;
        }
}
function newLaser(){
    var laser = Crafty.e("2D, DOM, Image, Collision")
    .image("laser.png")
    .collision()
    .onHit("alien", function(){
        laser.destroy();
        alien.destroy();
    });
    laser.y = 510;
    laser.x = ship.x + 40;
    var moveLaser = setInterval(function(){
        if(laser.y < 1){
            clearInterval(moveLaser);
            laser.destroy();
        } else {
            laser.y = laser.y - 4;
        }
    }, 1);
}

function checkBorder(){
    if(ship.x < 0 || ship.x > 1250){
        Crafty.enterScene("gameStart");
    }
}
function goLeft(){
    var goLeftCount = 65;
    var goLeftInterval = setInterval(function(){
        if(goLeftCount === 0){
            clearInterval(goLeftInterval);
            checkBorder();
        } else {
        ship.x = ship.x - 1;
        goLeftCount -= 1;
        }
    }, 1);
}
function goRight(){
    var goRightCount = 65;
    var goRightInterval = setInterval(function(){
        if(goRightCount === 0){
            clearInterval(goRightInterval);
            checkBorder();
        } else {
            ship.x = ship.x + 1;
            goRightCount -= 1;
        }
    }, 1);
}
var ship = Crafty.e("2D, DOM, Image, Bind")
    .image("ship.png")
    .bind('KeyDown', function(e) {
            if(e.key == Crafty.keys['LEFT_ARROW']) {
              goLeft();
              } else if (e.key == Crafty.keys['RIGHT_ARROW']) {
              goRight();
              } else if(e.key == Crafty.keys['SPACE']) {
              newLaser();
              }
          });
ship.y = 520;
ship.x = 600;
newAlien();
});
Crafty.enterScene("gameStart");

有人能告诉我我的代码有什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2015-01-22 08:51:43

一个问题是:当您试图销毁外星人时,alien变量实际上不在作用域中。(您已经在不同的函数中声明了它。)所以alien.destroy();是不可能工作的。

第二个问题:您传递给.onHit("alien", callback)的函数只有在激光击中带有“外星人”组件的实体时才会运行。它不知道您为实体指定的变量名。但是,将向回调函数传递有关它正在与哪些实体发生冲突的信息,您可以使用该信息来解决冲突。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27869864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档