大多数示例使用精灵来添加物理,但我想将物理添加到使用Graphics类创建的对象.例如:
var square = game.add.graphics( 0, 0 );
//some definitions
game.physics.arcade.enable( square );
Run Code Online (Sandbox Code Playgroud)
这根本不适用于图形,但它可以立即使用精灵.为什么这样,我怎么能实现这个目标?
提前致谢.
我正在使用Phaser框架,我想创建一个新的类,在phaser中保存sprite类的所有属性,所以我尝试这样做
var mario = function(){
Phaser.Sprite.call(this); // inherit from sprite
};
Run Code Online (Sandbox Code Playgroud)
但是有一个错误"Uncaught TypeError:undefined is not a function"
然后我试过了
var mario = function(){
this.anything = "";
};
mario.prototype = new Phaser.Sprite();
Run Code Online (Sandbox Code Playgroud)
确定它有效,但它调用了相位器构造函数,我不想创建精灵,直到我这样做 var heroObj = new mario();
我该怎么办 ?
如何为已添加到组中的精灵设置动画?
这是我的spritesheet:
game.load.spritesheet('enemyBullet', 'assets/games/invaders/enemy-bullet.png', 11, 19);
Run Code Online (Sandbox Code Playgroud)
这是小组:
// The enemy's bullets
enemyBullets = game.add.group();
enemyBullets.enableBody = true;
enemyBullets.physicsBodyType = Phaser.Physics.ARCADE;
enemyBullets.createMultiple(30, 'enemyBullet');
enemyBullets.setAll('anchor.x', 0.5);
enemyBullets.setAll('anchor.y', 1);
enemyBullets.setAll('outOfBoundsKill', true);
enemyBullets.setAll('checkWorldBounds', true);
Run Code Online (Sandbox Code Playgroud)
这是我认为我应该添加的代码.
enemyBullets.animations.add('fly3', [ 0, 1, 2, 3], 20, true);
enemyBullets.play('fly3');
Run Code Online (Sandbox Code Playgroud)
但是,如果我在上面的组代码块中的任何地方添加它,我会收到错误'enemyBullets.animations'.undefined'.
有任何想法吗?
我要销毁某个对象,使其通过某个x值。这些对象是称为“球”的移相器组的一部分。在我的更新循环中,我有以下代码行:
balls.forEach(updateBalls, null, true);
Run Code Online (Sandbox Code Playgroud)
这是updateBalls函数:
function updateBalls(ball) {
if (ball.x > 800) {
ball.destroy();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是在循环期间删除对象会弄乱循环,这是我得到的错误:
TypeError:this.children [i]未定义
我试图将每个球推到一个阵列,然后像这样破坏每个球。
function updateBalls(ball) {
if (ball.x > 800) {
ballsToDestroy.push(ball);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在更新循环中:
balls.forEach(updateBalls, null, true);
for (x = 0; x < ballsToDestroy.length; balls++) {
ballsToDestroy[x].destroy();
}
Run Code Online (Sandbox Code Playgroud)
这给了我一些奇怪的错误。
如果我使用ball.kill(),它会起作用,但最终会导致游戏延迟,因为实际上并没有移除球。
我该如何解决?
我正在尝试检测两个对象何时相互碰撞,但是我不确定该怎么做。
我有以下场景,该场景向场景中添加了两个物理图像。我只需要一种方法来检测两者何时发生碰撞。
export class MainGame extends Scene {
public create() {
// Create the player
this.player = this.matter.add.image(300, 100, 'player')
// Create a pillar
let pillar = this.matter.add.image(500, 0, 'pillar1', null, { isStatic: true })
// Somehow detect collision between the two...
}
}
Run Code Online (Sandbox Code Playgroud)
我无法确定的是如何检测玩家何时撞到支柱。我所寻找的一切都是如何使用街机物理学来实现的,但是我正在使用物质物理学。
我找不到有关如何检测碰撞然后运行函数的任何信息。
我用es6语法搞乱了Phaser 3.在Phaser 3中,现在一切都由场景组成,您可以在其中加载/更新/等所有内容.因此,对于主要Game场景,我延伸Phaser.Scene.
export default class Game extends Phaser.Scene {
preload()
create()
...
Run Code Online (Sandbox Code Playgroud)
但是,假设我有一个播放器,它将涉及100行代码,我希望将其保存在单独的文件中以保证代码清洁.我该如何组织?
我发现的每个教程/信息都包含了同一文件中场景的所有代码,但对于完全充实的游戏来说,这显然是不现实的.我想将游戏的许多元素分成各自的类/文件.
那么,我只是创建了一个不扩展任何内容的播放器类?或者我应该通过类似的方式扩展它Phaser.Sprite?
我的fonts/目录中有一种字体。如何将其加载到游戏中,然后在游戏中的文本对象上使用它?在Phaser 3中,我找不到使用字体的任何东西。
我已经使用了Phaser 2一段时间,但最近将其转换为Phaser 3,我想知道是否有一种方法或成员可能等效于'outOfBoundsKill'。我在Phaser 3中有一个Arc Object,并对其施加了重力,因此我想确保在超出画布范围时将其杀死或破坏。
有关outOfBoundsKill的更多信息:https ://phaser.io/docs/2.6.2/Phaser.Sprite.html#outOfBoundsKill
我已经尝试过此代码示例,但它没有破坏弧对象,“ ball”是弧对象。
ball.on('worldbounds', function() {
if (!Over) {
ball.destroy();
HealthBar.livesLeft -= 1;
HealthBar.cs.scale.x = HealthBar.livesLeft / HealthBar.lives;
var shake = this.sound.add('shake');
shake.play();
}
}, this);Run Code Online (Sandbox Code Playgroud)
我正在使用Phaser.io
我想使用A, S, D,W键。我知道你可以像这样使用箭头键:
create(){
...
gameState.cursors = this.input.keyboard.createCursorKeys();
}
update(){
if (gameState.cursors.left.isDown) {
gameState.player1.setVelocityX(-160);
} else if (gameState.cursors.right.isDown) {
gameState.player1.setVelocityX(160);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图切换.left.为.A.与.right.对.D.,但它不工作。
有任何想法吗?
phaser-framework ×10
javascript ×7
animation ×1
game-engine ×1
game-physics ×1
lance ×1
matterjs ×1
multiplayer ×1
oop ×1
sprite ×1