2016-08-11 1 views
1

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; 

    }, 
}; 
+0

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

+1

@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. –

+0

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

Antwort

0

Ich ging zurück durch einige Spiele, die ich gemacht und das einzige, was anders zwischen meinen Code und dein ist, wenn Sie die spritesheet erklären.

Sie deklarieren Ball spritesheet:

game.load.spritesheet('ballsheet', './assets/balls.png', 16, 16, 5); 

ich Ihnen die 5 am Ende brauchen nicht zu denken. Sie können Phaser einfach die Breite und Höhe jedes Sprites mitteilen und es wird automatisch in die richtige Anzahl an Sprites aufgeteilt, vorausgesetzt, es gibt keine Lücke zwischen den Sprites auf dem Spritesheet.

Sie scheinen es auf diese Weise beim Laden Ihrer Fliesen Spritesheet getan haben. Sie haben die Breite und Höhe jeder Kachel deklariert und müssen nicht angeben, wie viele Sprites in Ihrem Spritesheet enthalten sind.

Dies ist das einzige, was ich denke, dass das Problem verursachen könnte.

Ich hoffe, es hilft Ihnen in irgendeiner Weise.