具有2个重力的狡猾元素

时间:2015-06-01 08:09:56

标签: javascript craftyjs

我正在努力了解Crafty。这是我的代码。

SELECT julianday('now') - julianday('1776-07-04');

我想添加

Crafty.init(500,300, document.getElementById('game'));

Crafty.e('Floor, 2D, Canvas, Color')
  .attr({x: 0, y: 250, w: 200, h: 10})
  .color('green');

Crafty.e('SecondFloor, 2D, Canvas, Color')
  .attr({x: 250, y: 230, w: 200, h: 10})
  .color('red')

Crafty.background('#FFFFFF url(http://samenvattingleren.nl/img/img2.jpg) no-repeat center center');

Crafty.e('2D, Canvas, Color, Fourway, Gravity')
  .attr({x: 25, y: 5, w: 50, h: 50})
  .color('orange')
  .fourway(4)
  .gravity("Floor")
  .bind('KeyDown', function(e) {
    if(e.key == Crafty.keys.LEFT_ARROW) {
    this.x = this.x - 1;
    } else if (e.key == Crafty.keys.RIGHT_ARROW) {
        this.x = this.x + 1;
    } else if (e.key == Crafty.keys.UP_ARROW) {
    this.y = this.y - 1;
    } else if (e.key == Crafty.keys.DOWN_ARROW) {
    this.y = this.y + 1;
    } else if (e.key == Crafty.keys.ESC) {
        this.x = 0;
    }
  })

但这不起作用。广场仍然通过SecondFloor

1 个答案:

答案 0 :(得分:1)

" Floor"组件应被视为一种标记,您可以将其添加到任何应充当楼层的实体。在您的示例代码中,似乎没有必要区分" Floor"和#34; SecondFloor",所以你可以将后者更改为" Floor"。

如果您有两个custom components,您希望始终充当场内,解决方案是让他们需要" Floor"组件自动。例如

Crafty.c("IcePlatform", {
    init: function(){ this.requires("Floor"); }
    // Stuff specific to "IcePlatform"
};

Crafty.c("MovingPlatform", {
    init: function(){ this.requires("Floor"); }
    // Stuff specific to "MovingPlatform"
};

然后每当有任何实体拥有" MovingPlatform"或" IcePlatform"也将作为" Floor",并与Gravity进行适当的互动。