PlayCanvas로 샌디를 걷게 하는 게임을 만든다☆(제6회) ~다른 엔티티의 이벤트를 데리러~
10584 단어 HTML5자바스크립트PlayCanvas
이렇게 만들고 있습니다.
htps : // p ぁ y 칸 v. 아 s/b/아 PwxqY/
※본 해설보다 개발이 진행되고 있는 일도 있으므로 양해 바랍니다.
하나의 엔티티의 충돌 판정을 UI용의 엔티티에 전하는 방법은?
예를 들어 골 포스트 붉은 원통이 있습니다.
이것을 터치하면 대화 상자가 나타납니다.
PlayCanvas는 각 엔티티에 스크립트를 갖게 프로그래밍되지만 원통과 UI는 다른 엔티티입니다.
어떻게 엔티티간에 상호 작용할 수 있습니까?
대답은 사용자 매뉴얼 > 스크립팅 > 통신에 있었습니다.
htps : //로 ゔぇぺぺr.ぁ y 칸ゔ ぁ s. 코 m / 자 / 우세 r 마누아 l / sc 리 p 찐 g / 코무니 카치온 /
커뮤니케이션이란 좀처럼 듣지 않는 표현일지도 모르지만, 다른 엔티티의 이벤트를 집어 오는 것이라고 생각해 주세요.
스크립트 간의 통신은
예를 들어 골 포스트 붉은 원통이 있습니다.
이것을 터치하면 대화 상자가 나타납니다.
PlayCanvas는 각 엔티티에 스크립트를 갖게 프로그래밍되지만 원통과 UI는 다른 엔티티입니다.
어떻게 엔티티간에 상호 작용할 수 있습니까?
대답은 사용자 매뉴얼 > 스크립팅 > 통신에 있었습니다.
htps : //로 ゔぇぺぺr.ぁ y 칸ゔ ぁ s. 코 m / 자 / 우세 r 마누아 l / sc 리 p 찐 g / 코무니 카치온 /
커뮤니케이션이란 좀처럼 듣지 않는 표현일지도 모르지만, 다른 엔티티의 이벤트를 집어 오는 것이라고 생각해 주세요.
스크립트 간의 통신은
2 종류가 있습니다.
아무래도 후자가 편리합니다 (웃음)
엔티티에 샌디가 충돌했을 때에 UI 부품에 충돌 판정을 전달하도록, 어플리케이션 이벤트를 사용해 프로그래밍해 갑니다.
충돌 판정
다음 스크립트를 작성합니다.
hitSandy.jsvar HitSandy = pc.createScript('hitSandy');
// initialize code called once per entity
HitSandy.prototype.initialize = function() {
this.entity.collision.on('triggerenter', this.onTriggerEnter, this);
};
// update code called every frame
HitSandy.prototype.update = function(dt) {
};
HitSandy.prototype.onTriggerEnter = function(entity) {
this.app.fire('hitSandy:hit', this.entity.name, entity.name);
};
이 스크립트가 적용되고 있는 엔티티의 당 판정에, 무엇인가 강체가 충돌했을 때에 「hitSandy:hit」라고 하는 이벤트를 발화하도록(듯이) 했습니다.
덧붙여서 「hitSandy:hit」이벤트를 받은 측은 충돌한 2개의 엔티티의 이름을 받을 수 있습니다.
이 스크립트를 PlayCanvas로 샌디를 걷게 하는 게임을 만들자☆(제4회)에서 만든 templates 디렉토리의 "start""goal"엔티티에 적용하십시오.
(예)
충돌 판정을 UI로 표시
이벤트의 통지를 받는 스크립트의 초기화 함수로 이벤트의 수취와, 이벤트를 받았을 때의 이벤트 핸들러를 작성.
이 경우, 당 판정의 충돌을 검지하면 「onSandyHit」함수를 호출한다.
충돌 이벤트로부터는 충돌한 2개의 엔티티의 이름도 도착해, 「onSandyHit」함수에서는 name1, name2의 인수가 그것을 받게 되어 있습니다.
ui.js// initialize code called once per entity
Ui.prototype.initialize = function() {
・・・
// initializeメソッドに以下を追加
// listen for the player:move event
this.app.on('hitSandy:hit', this.onSandyHit);
// remove player:move event listeners when script destroyed
this.on('destroy', function() {
this.app.off('hitSandy:hit', this,onSandyHit);
});
}
//onSandyHitメソッドを新規追加
Ui.prototype.onSandyHit = function(name1,name2) {
// 第1引数は衝突された側のエンティティの名前、第2引数は衝突したエンティティの名前
// メッセージを作成。
var caption = "";
var message = "";
if(name1=="start"){
caption = "START";
message = name2 + " start!!";
}else if(name1 == "goal"){
caption = "GOAL";
message = name2 + " reach the goal!!";
}
// ダイアログにメッセージを載せる
var disp_dialog = document.getElementsByClassName('pos_top_center')[0];
disp_dialog.style.display = "block";
disp_dialog.getElementsByClassName('caption')[0].innerHTML = caption;
disp_dialog.getElementsByClassName('message')[0].innerHTML = message;
};
이제 Launch 해 봅시다.
START
GOAL
Reference
이 문제에 관하여(PlayCanvas로 샌디를 걷게 하는 게임을 만든다☆(제6회) ~다른 엔티티의 이벤트를 데리러~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/bcosizm/items/de16d67683996a0bfb72
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var HitSandy = pc.createScript('hitSandy');
// initialize code called once per entity
HitSandy.prototype.initialize = function() {
this.entity.collision.on('triggerenter', this.onTriggerEnter, this);
};
// update code called every frame
HitSandy.prototype.update = function(dt) {
};
HitSandy.prototype.onTriggerEnter = function(entity) {
this.app.fire('hitSandy:hit', this.entity.name, entity.name);
};
이벤트의 통지를 받는 스크립트의 초기화 함수로 이벤트의 수취와, 이벤트를 받았을 때의 이벤트 핸들러를 작성.
이 경우, 당 판정의 충돌을 검지하면 「onSandyHit」함수를 호출한다.
충돌 이벤트로부터는 충돌한 2개의 엔티티의 이름도 도착해, 「onSandyHit」함수에서는 name1, name2의 인수가 그것을 받게 되어 있습니다.
ui.js
// initialize code called once per entity
Ui.prototype.initialize = function() {
・・・
// initializeメソッドに以下を追加
// listen for the player:move event
this.app.on('hitSandy:hit', this.onSandyHit);
// remove player:move event listeners when script destroyed
this.on('destroy', function() {
this.app.off('hitSandy:hit', this,onSandyHit);
});
}
//onSandyHitメソッドを新規追加
Ui.prototype.onSandyHit = function(name1,name2) {
// 第1引数は衝突された側のエンティティの名前、第2引数は衝突したエンティティの名前
// メッセージを作成。
var caption = "";
var message = "";
if(name1=="start"){
caption = "START";
message = name2 + " start!!";
}else if(name1 == "goal"){
caption = "GOAL";
message = name2 + " reach the goal!!";
}
// ダイアログにメッセージを載せる
var disp_dialog = document.getElementsByClassName('pos_top_center')[0];
disp_dialog.style.display = "block";
disp_dialog.getElementsByClassName('caption')[0].innerHTML = caption;
disp_dialog.getElementsByClassName('message')[0].innerHTML = message;
};
이제 Launch 해 봅시다.
START
GOAL
Reference
이 문제에 관하여(PlayCanvas로 샌디를 걷게 하는 게임을 만든다☆(제6회) ~다른 엔티티의 이벤트를 데리러~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bcosizm/items/de16d67683996a0bfb72텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)