Ich arbeite daran, einen Breakout-Klon zu erstellen, der mir hilft, Phaser zu lernen (folgt dem Gesamtdesign von jsbreakouts.org). Jedenfalls habe ich den Startbildschirm eingerichtet. Vom Startbildschirm aus kann ich ohne Probleme in den Spielstatus wechseln. In meinem Spielzustand kann ich den Hintergrund und das Paddel ohne Probleme laden. Das Paddel reagiert auf die Mauseingabe wie es soll.Problem beim Laden von Sprite aus Spritesheet mit Phaser
Aber der Ball lädt aus irgendeinem Grund nicht. Der Ball kommt von einem Spritesheet. Jeder Ball im Blatt ist 16x16 und es gibt 5 von ihnen. Ich kann nicht einmal einen von ihnen laden, geschweige denn animieren.
Die Kugeln Spritesheet befindet sich im selben Verzeichnis wie das Paddel. Ich habe anderen Code online angeschaut und soweit ich das beurteilen kann, mache ich es richtig. Aber es funktioniert nicht.
Was mache ich falsch?
Hier ist mein Spiel Zustand Code:
var paddle;
var ball;
var Game = {
preload : function() {
// Here we load all the needed resources for the level.
game.load.image('background', './assets/bg_prerendered.png');
game.load.image('paddle', './assets/paddle2.png');
game.load.spritesheet('ballsheet', './assets/balls.png', 16, 16, 5);
game.load.spritesheet('tiles', './assets/tile_spritesheet.png', 32, 16);
},
create : function() {
//enable physics
game.physics.startSystem(Phaser.Physics.ARCADE);
game.physics.arcade.checkCollision.down = false;
//add the background
background = game.add.sprite(0, 0, 'background');
//add score text placeholder
game.add.text(50, 390, "Lives: 3 Score: 700 Level: 1", { font: "12px sans-serif", fill: "#000000"});
//add the paddle and set it up
paddle = game.add.sprite(136, 384, 'paddle');
//set the anchor to be the lower center of the paddle
paddle.anchor.set(0.5,1);
//enable paddle physics
game.physics.enable(paddle, Phaser.Physics.Arcade);
paddle.body.immovable = true;
paddle.body.collideWorldBounds = true;
ball = game.add.sprite(100,100, 'ballsheet');
ball.frame = 0;
//ball.animations.add('rotate',[0,1,2,3,4], 10, true);
//game.physics.enable(ball, Phaser.Physics.Arcade);
//ball.body.collideWorldBounds = true;
//ball.play('rotate');
},
update: function() {
paddle.x = game.input.x;
},
};
nicht viel über Phaser wissen, aber ich bemerkt, dass Sie den Anker auf den Ball setzen didnt aber das Paddel tat. Ich hatte auch Probleme, wenn ich einen Abstandhalter für mein Spritesheet verwendete, so dass es versuchen würde, Platz zwischen meinen Sprites zu laden, die für mich nichts aussahen. Ich musste mit der Größe und dem Abstand herumspielen, bis ich einen Teil eines Beines sah und von dort ging – Ian
@Ian Der Anker sollte nicht so wichtig sein, wie es sollte Standard (nach oben links, nehme ich an). Ich habe es gerade getestet, um zu bestätigen, dass es keine Rolle spielt. Dein Tipp über das Sprite Sheet ist interessant. Kaum vorstellbar, dass das einen Unterschied machen würde, aber ich werde mich darum kümmern. Vielen Dank. –
Sie könnten den Rahmen für ein Sprite festlegen, während Sie es erstellen, 'game.add.sprite (100,100, 'ballsheet', 0)' 'obwohl Sie den Rahmen auch später setzen können, so dass das eigentlich keine Rolle spielt. Ich kann nichts falsches mit deinem Code sehen. Gibt es Fehlermeldungen in der JavaScript-Konsole? – BdR