Phaser笔记-scene的preload、create、update、player、键盘控制
一般phaser最简单的配置文件如下:
-
let config = {
-
type: Phaser.AUTO,
-
width: 800,
-
height:600,
-
scene: {
-
preload: preload,
-
create: create,
-
update: update
-
},
-
physics:{
-
default: 'arcade',
-
arcade: {
-
gravity: { y: 300},
-
debug: false
-
}
-
}
-
};
其中scene有3个函数:preload、create、update
preload:是在create函数前调用的,一般用于资源的加载;
create:preload完成后,就会调用到这函数,这个函数一般用于构造界面,关联玩家键盘,游戏大部分逻辑事件等等等;
update:会按周期进行调用,一般用于键盘控制玩家,玩家坐标更新等。
下面是player键盘控制,首先定义变量:
let player;
create函数中奖player构造成精灵,并且设置好回弹参数以将碰撞属性设置为true:
-
player = this.physics.add.sprite(100, 450, 'dude');
-
player.setBounce(0.2);
-
player.setCollideWorldBounds(true);
如果给出的精灵是这样的:
那么还需要创建动画,方便后边的键盘操作,上面的精灵是个横版的图,左边4幅是左,中间那一幅是停止的,右边4幅是右走。
-
this.anims.create({
-
-
key: 'left',
-
frames: this.anims.generateFrameNumbers('dude', {start: 0, end: 3}),
-
frameRate: 10,
-
repeat: -1
-
});
-
-
this.anims.create({
-
-
key: 'turn',
-
frames: [{key: 'dude', frame: 4}],
-
frameRate: 20
-
});
-
-
-
this.anims.create({
-
-
key: 'right',
-
frames: this.anims.generateFrameNumbers('dude', {start: 5, end: 8}),
-
frameRate: 10,
-
repeat: -1
-
});
比如横版游戏中有个platforms,玩家可以站在平台上:
this.physics.add.collider(stars, platforms);
在平台上有些加分道具(如stars),当玩家捡到(重叠)到加分道具会执行对应的回调函数:
this.physics.add.overlap(player, stars, collectStar, null, this);
其中stars是变量,collectStar是回调函数。
同样平台上还会有一些敌人,如果玩家接触到这些敌人也会触发对应的回调函数:
this.physics.add.collider(player, bombs, hitBomb, null, this);
其中hitBomb就是回调函数。
关于键盘首先定义cursor变量:
let cursors;
在create函数中创建光标:
cursors = this.input.keyboard.createCursorKeys();
在update函数中通过按下不同的键盘干不同的事情:
-
function update(){
-
-
if(cursors.left.isDown){
-
}
-
else if(cursors.right.isDown){
-
}
-
else{
-
}
-
-
if(cursors.up.isDown && player.body.touching.down) {
-
}
-
-
}
分别是左键被按下,右键被按下,跳起一次。
如将玩家(精灵)在不同操作下,设置不同的X,Y轴坐标,以及播放不同的动画。
-
function update(){
-
-
if(cursors.left.isDown){
-
-
player.setVelocityX(-160);
-
player.anims.play('left', true);
-
}
-
else if(cursors.right.isDown){
-
-
player.setVelocityX(160);
-
player.anims.play('right', true);
-
}
-
else{
-
-
player.setVelocityX(0);
-
player.anims.play('turn', true);
-
}
-
-
if(cursors.up.isDown && player.body.touching.down) {
-
-
player.setVelocityY(-330);
-
}
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhaefib
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13