我是PhaserJS的全新手。我正在尝试在PhaserJS中开发一个游戏,其中点击屏幕一次应该使用户头像在屏幕上移动并且双击应该使其跳跃。但是,我无法弄清楚如何捕捉双击事件。我在他们的官方文档中看到了这个tutorial,但是没有用。当我把这一行
game.input.onTap.add(onTap, this);
中的
function create(){
.....
}
功能,显示此错误
Uncaught TypeError: Cannot read property 'add' of undefined
我可以使用以下代码检测单击事件:
if(game.input.onTap && player.body.touching.down){
player.setVelocity(-530);
}
我已经阅读了另一个线程,其中成员已经评论说要检测双击,应该启动计时器并检查点击是否在阈值内。但是,我认为这不是一种万无一失的方法,必须有更好的方法。有人可以帮忙吗?
编辑: 相关代码:
<script type="text/javascript">
var width = 800;
var height = 600;
var config = {
type: Phaser.AUTO,
width: width,
height: height,
physics: {
default: 'arcade',
arcade: {
gravity: { y:300 },
debug: false
}
},
scene: {
preload: preload,
create: create,
update: update
}
};
var game = new Phaser.Game(config);
function preload (){
this.load.image("sky", "{% static 'task_scheduler/assets/sky.png' %}");
this.load.image("ground", "{% static 'task_scheduler/assets/platform.png' %}");
this.load.image("star", "{% static 'task_scheduler/assets/star.png' %}");
this.load.image("bomb", "{% static 'task_scheduler/assets/bomb.png' %}");
this.load.spritesheet("dude", "{% static 'task_scheduler/assets/dude.png' %}", {frameWidth: 32, frameHeight: 48});
}
var platforms;
var player;
var cursors;
var stars;
var bombs;
var score = 0;
var scoreText;
function create (){
//some other code here
//mouse and touch
this.input.onTap.add(onTap, this);
}
function onTap(pointer, doubleTap){
if (doubleTap){
player.setVelocityY(-530);
}else{
player.setVelocityX(160);
player.anims.play('right', true);
}
}
答案 0 :(得分:1)
function create (){
//some other code here
//mouse and touch
this.input.onTap.add(onTap, this);
}
在这里你应该使用game.input.onTap.add(onTap, this);
因为this
将引用调用create
函数的上下文。因此,this
不具有属性add
以及game
变量可用的其他属性。
就Double Tap而言,相位器会检测到它。我认为你不需要为此编写任何明确的代码。 onTap
函数可以正常工作。