0

Phaser JS를 처음 사용하고 "간단한"게임을 만들려고합니다. 당신이 게임 벽돌 브레이커를 상상할 수 있다면 - 단지베이스와 볼. 기수를 올리고 기지에 여전히 공을 올려 놓고 싶습니다. 나는 또한베이스를 기울이고 어느 쪽이 기울어 져 있는지에 따라 볼을 "롤"하게 할 수 있기를 원합니다.Phaser에서 동작하지 않고 스프라이트 물리를 활성화/활성화하는 방법

처음에는 볼이 떨어지고 바닥에 떨어지며, 내가 밑으로 움직이면 모든 것이 예상대로 작동합니다. 하지만 내 문제는 공이 기지에서 쉬고 난 후에 나는 공이 바닥을 통과하지 않고 기둥을 움직일 수 없다 - 나는 공이 기둥을 따라 움직이지 않기 때문에 그 상태에서 기둥을 기울일 수 없다. 기울이기.

어쩌면 물리 엔진이 스프라이트를 무시하는 대신 고려할 수 있도록 (예 : "제한 시간 초과") 한 번으로 볼 스프라이트 (Phaser의 Box2d 물리학 사용)를 활성화/활성화로 설정해야합니까?

는 UPDATE : 페이저의 기본 아케이드 물리학을 사용하여 @의 필립의 제안에서는, 나는 몇 가지 간단한 중첩의이 있지만 그건 내가 좋겠 (지금에 정상 앉아 공을 유지하기 위해베이스의 최대 움직임을 얻을 수 있어요 일어나는 것을 막고 순간을 막는 방법을 모르십니까?); 베이스가 기울어 져있는 동안 볼을 양쪽으로 굴리는 것을 허용 할 수 없었습니다. 베이스가 회전되어 충돌 영역이 움직이지 않고 공이 "롤"해야한다는 것을 알지 못하는 것 같습니다. http://phaser.io/sandbox/WVVnswOt/play

UPDATE 2 : 여기 내 Box2D의 페이저 시도의 codepen이다 여기서 예시 페이저 (좌측 이동 또는 회전베이스를 참조 오른쪽) 디버깅 정보와 sanbox이다. 화살표 키를 사용하여 곧바로베이스를 위, 아래, 왼쪽, 오른쪽으로 움직이면 (상자로 흘러가는 동안) 물리학은 예상대로 작동합니다. 상자가 바닥에 닿은 후 몇 초 동안 기다리면 밑면을 움직여도 상자에 아무런 영향을 미치지 않습니다. 나는 상자도 초기 대기 후베이스에 의해 영향을받을 싶습니다 : http://codepen.io/mgalpy/pen/wWRBpo

; 

UPDATE 3 :이 마지막으로 나의 목표를 달성 할 수 있었다. 기지를 "정적"으로 만들었지 만, 정적 대신에기구 학적 (kinematic)을 사용하고 각 업데이트에서베이스의 속도를 제로화함으로써 이동 가능합니다. 이제 왼쪽과 오른쪽으로 회전이 있습니다. http://codepen.io/mgalpy/pen/qNLVdA

// JavaScript source code 
var game = new Phaser.Game(800, 600, Phaser.CANVAS, '', { 
preload: function() { 
    this.scale.pageAlignHorizontally = true; 
    this.game.stage.backgroundColor = "#FFFFFF"; 
    this.game.load.image('boxImg', boxImg); 
}, 
create: function() { 
    this.game.physics.startSystem(Phaser.Physics.BOX2D); 
    this.game.physics.box2d.gravity.y = 500; 
    this.game.physics.box2d.setBoundsToWorld(); 

    var vertices = [[-57, 51.5, 54.5, 53, -55, 53.5]]; 
    this.box2 = this.game.add.sprite(420, 50, 'boxImg'); 
    this.game.physics.box2d.enable(this.box2); 
    this.createPolygon(this.box2, vertices); 

    this.box = this.game.add.sprite(420, 450, 'boxImg'); 
    this.game.physics.box2d.enable(this.box); 
    this.createPolygon(this.box, vertices); 
    this.box.body.fixedRotation = true; 
    this.box.body.kinematic = true; 

    this.cursors = this.game.input.keyboard.createCursorKeys(); 
}, 
createPolygon: function (piece, vertices) { 
    piece.body.clearFixtures(); 
    for (var i = 0; i < vertices.length; i++) { 
     piece.body.addPolygon(vertices[i]); 
    } 
}, 
render: function() { 
    this.game.debug.box2dWorld(); 
}, 
update: function() { 
    this.box.body.velocity.x = 0; 
    this.box.body.velocity.y = 0; 
    this.box.body.angularVelocity = 0; 

    if (this.cursors.left.isDown) { 
     this.box.body.rotateLeft(30); 
    } 
    else if (this.cursors.right.isDown) { 
     this.box.body.rotateRight(30); 
    } 

    if (this.cursors.up.isDown) { 
     this.box.body.moveUp(200); 
    } 
    else if (this.cursors.down.isDown) { 
     this.box.body.moveDown(200); 

    } 
} 
}); 

var boxImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAABYCAYAAAB4fpBOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxOEM2MTA5OTk0RERFNDExOUExQUVFOUVENUM1REE4RiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEOTVEQzI2N0UxNDAxMUU0OUExNUE5MDkzOTc2MzE0MiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEOTVEQzI2NkUxNDAxMUU0OUExNUE5MDkzOTc2MzE0MiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkI1MkE0QTFEMjlFMUU0MTFBM0I1RDA2NTA2MjUxOTkyIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE4QzYxMDk5OTREREU0MTE5QTFBRUU5RUQ1QzVEQThGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+p0NIbgAAA29JREFUeNrsnTuPEzEQx+3dTUKSI3dClEjUiALRUHENLYJ6KyRKvsOVNPAF0oYqafkMUF1PARINAgnRXAL3IMk+GOe8y9jaSIDWPs76jzTSxLvO4zeT8fgRRU6nU9EgN0nvk+6TLlj7nLTU9jHpWts/Sc+0vdbXhL53zvp/J821fUK6Yv1PxSWUNE3/6v7EejwgHZM+ucDPUGjHNDn5B2mm7TPtKNvJhRUkC93W5OQqSDL93JUcbQkSFRRLbavnOZnNZsrOCfziTz6ctCL81QXDDkUWOkjekL4lZ7ysLkTspiFgtya7pHukj0hf0LfgdVNK2ec9vi5G4svRnujEed3WTfL6251EhYjkuR2RHUfapraE92G2ei4pz+1407/Qdrl5HLA8JujPKdIPOPC7/I756UB8/Hbd+zuT5LBOXBhOqpys2qV2snJQLJud3EksJ1fRFTMny99Olpv+BQusjPWn1xTsNevAKlh/YQTmFnlGepD8b6FQllKssrh+zO3LItU3+cGt92LUr8Z1cY2i/DYHvsM7rfMImfgfZZ3HdfBYEnGqsRlpAOdCoi22ykyg4xj4VaQUv8AhnoF3jfl1CV+4Bt7nF/ICORwpJTDgQzPCY9BxDDwxczjguAaOpO0Z+KhpegrBoBkM8A6/0LDwAnFZh2cFgh8pJTDgA6MOx+KV3xxeIIcjpYQGfBd1OCIcdTjEUZWCOhwpJSjg1m4P/OAaeBc1OFJK0MCNtfAM03rnwI0cUmLzxznwxKzBAcY18KGZUjCtx6AZGPArRh2OstA58J5Rh2Pig5QSGnDjbDgWrtwDt35ughzueeID8Ty1Rx2OQTMw4Fie9QwcGxBIKWEDtxav4AfXwM3lWayHI6WEBtw45rbK4AdEeGDAcczNM3Acc0NKwUwT0iJwrKUgpYQNHOvhnoFjx8czcOxpega+gzocg2bQwI2jbjh55bkOx9lCpBTU4ZA263AU4p7rcOxpeq7DsWuPQTPsOhxloXPgxk9OsAGBlBIUcCxceQaOpVnPwBHSnoFb/26CaT0GzcCAW79CRg53Kepc+CfeMOitxMM770CmBel3V3bTBwVc/eXsIem9TcjLUgx7S9BqXw7TNF1WOXwMHs5lzAfNCelTHemQliNbsaXonlQ5XDDoEz2I3gCnVuSzSiO84ZcAAwDMgAEnYKuw5QAAAABJRU5ErkJggg=='; 

답변

0

Phaser.js가있다 : 그것은 작동하지 않을 때 또는 정지 후에도 - 여기 Box2D의 페이저 물리학 위에 스프라이트 쉬고 바닥 스프라이트를 이동, 상단 스프라이트의 물리 응답을 가지고있는 codepen이다 이 경우에는 Box2d를 사용할 필요가 없습니다. Here을 사용하면 물리학을 사용하는 간단한 플랫폼 게임을 만드는 데 필요한 기본 자습서를 찾을 수 있으므로이 도구는 물리 엔진의 사용법에 대한 기본 지식을 제공 할 수 있습니다.

물리학을 사용할 때의 기본 접근법은 물리 세계의 객체 변형에 대한 컨트롤을 물리 엔진에 넘기는 것입니다. 이 "세계"내에서 객체를 "이동"또는 "회전"하려는 경우 값을 직접 설정하는 대신 물리 엔진이 사용자를 위해 수행 할 작업을 적용해야합니다.

+0

감사합니다. @philipp! 이 문서를 살펴보고 몇 가지 샘플을 더 시험해 보겠습니다. 나는 여전히 문제가 있다면 내가하려고하는 것에 대한 페이저 샌드 박스를 게시 할 계획입니다. – mgalpy

+0

안녕하세요 @philipp 이제 마침내 직접 이동 대신 힘을 가하는 의미가 무엇인지 이해하기 시작했습니다. 상자를 움직일 때 상자에 약간의 힘을 가하면 물리학이 활성화되었습니다.그것은 매우 hackish하고 올바른 방법을 이해하려고 노력하고 있지만 여기에 내 WIP codepen에서 : http://codepen.io/mgalpy/pen/KrbmBJ – mgalpy

+0

Phaser가 Box2d를 모듈로 사용한다는 것을 알지 못했습니다. , 무엇이 매우 멋진 지, 나는 생각한다. 물리 엔진을 사용하면 항상 더 많은 코드가 필요하며 설정은 점점 더 복잡해집니다. 왜냐하면 10 픽셀의 움직임을 Impulse로 변환하거나 시간이 지남에 따라 강제 변환해야하기 때문입니다. 공식 Box2d 매뉴얼 http://box2d.org/manual.pdf를 보시면 모든 세부 사항, 확률 및 단점을 설명해 드릴 수 있습니다. – philipp

관련 문제