2012-02-03 2 views
1

CraftyJS에서 플레이어 엔티티가 다른 엔티티로 클리핑되는 것을 어떻게 막을 수 있습니까?craftyJS에서 오브젝트 클리핑 방지

이 내 객체입니다

 Crafty.c("Mushroom", { 
     init: function() { 
      this.addComponent("collision"); 
      this.collision(new Crafty.polygon([[8,8],[24,8],[24,24],[8,24]])); 
     } 
    }); 

    var mushroom = Crafty.e("2D, canvas, mushroomRed, Mushroom") 
    .attr({x: 200, y: 150, z:1, w: 32, h: 32}); 

이 내 플레이어 onHit이다, 그렇지 않으면 엉망이 간다, 내가 특정 각도에서 접근 할 때에만 작동

.onhit("mushroomRed", function() { 
      this.x += this._speed; 
      this.stop(); 
     } 

.

조언? 당신은 그들이 충돌 한 후 버섯에서 멀리 플레이어를 이동

this.x += this._speed; 

를 사용하는 것처럼

답변

3

는 것 같습니다. 하지만 x 방향으로 만 움직이면 상단 또는 하단에서 충돌하면 작동하지 않습니다. 그게 당신 문제인가요? 당신이 Multiway 또는 Fourway 구성 요소를 사용하는 경우

대신이 작업을 수행 할 수 있습니다 :

.bind('Moved', function(from) { 
    if(this.hit('mushroomRed')){ 
     this.attr({x: from.x, y:from.y}); 
    } 
}). 

편집 :이 최신 버전을 사용하고 http://jsfiddle.net/PzKVh/

에서 실행 완료 예를

// Init Crafty: 
Crafty.init(); 
Crafty.canvas.init(); 

var player = Crafty.e("2D, Canvas, Color, player, Multiway, Collision") 
    .attr({x: 0, y: 0, w: 50, h: 50}) 
    .color("rgb(0,255,0)") 
    .multiway(3, {UP_ARROW: -90, DOWN_ARROW: 90, RIGHT_ARROW: 0, LEFT_ARROW: 180}) 
    .bind('Moved', function(from) { 
     if(this.hit('mushroomRed')){ 
      this.attr({x: from.x, y:from.y}); 
     } 
    }); 

var mushroom = Crafty.e("2D, Canvas, mushroomRed, Color") 
    .attr({x: 200, y: 150, z:1, w: 32, h: 32}) 
    .color("red"); 

을 교묘 0.4.5. 몇 가지 중요한 변경 사항과 개선 사항이 있으므로이 버전을 사용하시기 바랍니다.

또한 당신이 더 많은 내가 코드를 삽입 할 위치에 정교하게 수, 난 당신이 많은

+0

안녕하세요 :-)이 도움이 찾을 가능성이 더 높습니다 생각 https://groups.google.com/forum/#!forum/craftyjs에서 포럼에 물어 주시기 바랍니다? 나는 Crafty에 상당히 익숙하며 약간의 어려움을 겪고 있습니다. 감사! – Deyang

+0

정말 고마워요! 그것은 매우 도움이되었다! – Deyang