2017-03-21 4 views
0

私はフェイザーで作業しています。ここに私のコードは次のとおりです。私は、キーボード上のaを押すとアニメーションを一度にフェイザー

// var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { create: create }); 
var game = new Phaser.Game(1000, 500, Phaser.AUTO, 'phaser-example', { 
     preload: preload, 
     create: create, 
     update: update 
    }); 

var bmd; 
var map; 
var layer; 
var marker; 
var currentTile = 0; 
var cursors; 
var player; 
var facing = 'left'; 
var jumpTimer = 0; 
var jumpButtonSpacebar; 
var sizeOfPlayer = 0.5; 

function preload() 
{ 
    game.load.atlasJSONHash('kisameSprite', 'assets/sprites/kisameSpriteSheet/kisameSpriteSheet.png', 'assets/sprites/kisameSpriteSheet/kisameSpriteSheet.json'); 
    game.load.image('back', 'assets/images/back.jpg'); 
} 

function create() 
{ 
    game.add.tileSprite(0, 0, 1000, 600, 'back'); 

    // Creates a blank tilemap 
    map = game.add.tilemap(); 

    // This is our tileset - it's just a BitmapData filled with a selection of randomly colored tiles 
    // but you could generate anything here 
    bmd = game.make.bitmapData(32 * 25, 32 * 2); 

    var colors = Phaser.Color.HSVColorWheel(); 

    var i = 0; 

    for(var y = 0; y < 2; y++) 
    { 
     for(var x = 0; x < 25; x++) 
     { 
      bmd.rect(x * 32, y * 32, 32, 32, colors[i].rgba); 
      i += 6; 
     } 
    } 

    // Add a Tileset image to the map 
    map.addTilesetImage('tiles', bmd); 

    // Creates a new blank layer and sets the map dimensions. 
    // In this case the map is 40x30 tiles in size and the tiles are 32x32 pixels in size. 
    layer = map.create('level1', 50, 50, 32, 32); 

    // Populate some tiles for our player to start on 
    map.putTile(30, 2, 10, layer); 
    map.putTile(30, 3, 10, layer); 
    map.putTile(30, 4, 10, layer); 

    map.setCollisionByExclusion([0]); 

    // Create our tile selector at the top of the screen 
    createTileSelector(); 

    player = game.add.sprite(64, 100, 'kisameSprite', 'stance/0.png'); 
    player.scale.setTo(sizeOfPlayer); 
    game.physics.arcade.enable(player); 
    game.physics.arcade.gravity.y = 350; 

    player.body.bounce.y = 0.1; 
    player.body.collideWorldBounds = true; 

    player.animations.add('attack', Phaser.Animation.generateFrameNames('attack/', 0, 5, '.png', 1), 10, false, true); 
    player.animations.add('left', Phaser.Animation.generateFrameNames('run/', 0, 4, '.png', 1), 10, true, true); 
    player.animations.add('idle', Phaser.Animation.generateFrameNames('stance/', 0, 3, '.png', 1), 10, true, true); 
    player.animations.add('right', Phaser.Animation.generateFrameNames('run/', 0, 4, '.png', 1), 10, true, true); 
    player.animations.add('jump', Phaser.Animation.generateFrameNames('jump/', 0, 3, '.png', 1), 10, false, true); 

    cursors = game.input.keyboard.createCursorKeys(); 
    jumpButtonSpacebar = game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR); 

    game.input.addMoveCallback(updateMarker, this); 

} 

function update() 
{ 
    game.input.keyboard.onDownCallback = somethingWasPressed; 

    game.physics.arcade.collide(player, layer); 

    player.body.velocity.x = 0; 

    if(cursors.left.isDown) 
    { 
     player.body.velocity.x = -150; 

     if(facing != 'left') 
     { 
      player.scale.setTo(-sizeOfPlayer, sizeOfPlayer); 
      player.animations.play('left'); 
      facing = 'left'; 
     } 
    } 
    else if(cursors.right.isDown) 
    { 
     animateRunRight(); 
    } 
    else 
    { 
     if(facing != 'idle') 
     { 
      player.animations.play('idle'); 

      if(facing == 'left') 
      { 
       player.frame = 5; 
      } 
      else 
      { 
       player.frame = 5; 
      } 

      facing = 'idle'; 
     } 
    } 

    if(jumpHasToOccur()) 
    { 
     player.body.velocity.y = -250; 

     player.animations.play('jump'); 

     game.time.events.add(Phaser.Timer.SECOND * 1.450, function(){player.animations.play('idle');}, this); 

     jumpTimer = game.time.now + 750; 
    } 

} 

function somethingWasPressed(keyCode) 
{ 
    if(keyEqualTo(keyCode, "a")) 
    {animateAttack();} 
} 

function keyEqualTo(keyCode, key) 
{ 
    var equalKey = (keyCode.key == key); 
    return equalKey; 
} 

function beIdle() 
{ 
    if(facing != 'idle') 
    { 
     player.animations.play('idle'); 

     if(facing == 'left') 
     { 
      player.frame = 5; 
     } 
     else 
     { 
      player.frame = 5; 
     } 

     facing = 'idle'; 
    } 
} 

function animateAttack() 
{ 
    player.animations.play('attack'); 
} 

function animateJump() 
{ 
    player.body.velocity.y = -250; 

    player.animations.play('jump'); 

    game.time.events.add(Phaser.Timer.SECOND * 1.450, function(){player.animations.play('idle');}, this); 

    jumpTimer = game.time.now + 750; 
} 

function animateRunRight() 
{ 
    player.body.velocity.x = 150; 

    if(facing != 'right') 
    { 
     player.scale.setTo(sizeOfPlayer, sizeOfPlayer); 
     player.animations.play('right'); 
     facing = 'right'; 
    } 
} 

function animateRunLeft() 
{ 
    player.body.velocity.x = -150; 

    if(facing != 'left') 
    { 
     player.scale.setTo(-sizeOfPlayer, sizeOfPlayer); 
     player.animations.play('left'); 
     facing = 'left'; 
    } 
} 

function jumpHasToOccur() 
{ 
    var jumButtonClicked = cursors.up.isDown || jumpButtonSpacebar.isDown; 
    var alreadyOnFloor = player.body.onFloor() && game.time.now > jumpTimer; 
    return jumButtonClicked && alreadyOnFloor; 
} 

function pickTile(sprite, pointer) 
{ 

    var x = game.math.snapToFloor(pointer.x, 32, 0); 
    var y = game.math.snapToFloor(pointer.y, 32, 0); 

    currentTileMarker.x = x; 
    currentTileMarker.y = y; 

    x /= 32; 
    y /= 32; 

    currentTile = x + (y * 25); 

} 

function updateMarker() 
{ 

    marker.x = layer.getTileX(game.input.activePointer.worldX) * 32; 
    marker.y = layer.getTileY(game.input.activePointer.worldY) * 32; 

    if(game.input.mousePointer.isDown && marker.y > 32) 
    { 
     map.putTile(currentTile, layer.getTileX(marker.x), layer.getTileY(marker.y), layer); 
    } 

} 

function createTileSelector() 
{ 

    // Our tile selection window 
    var tileSelector = game.add.group(); 

    var tileSelectorBackground = game.make.graphics(); 
    tileSelectorBackground.beginFill(0x000000, 0.8); 
    tileSelectorBackground.drawRect(0, 0, 800, 66); 
    tileSelectorBackground.endFill(); 

    tileSelector.add(tileSelectorBackground); 

    var tileStrip = tileSelector.create(1, 1, bmd); 
    tileStrip.inputEnabled = true; 
    tileStrip.events.onInputDown.add(pickTile, this); 

    // Our painting marker 
    marker = game.add.graphics(); 
    marker.lineStyle(2, 0x000000, 1); 
    marker.drawRect(0, 0, 32, 32); 

    // Our current tile marker 
    currentTileMarker = game.add.graphics(); 
    currentTileMarker.lineStyle(1, 0xffffff, 1); 
    currentTileMarker.drawRect(0, 0, 32, 32); 

    tileSelector.add(currentTileMarker); 

} 

私はアニメーションattackがかつてプレーしたいが、それは無限に果たしています。私のコードで何が間違っていますか?私はドキュメンテーションを読んで、そこには新しいアニメーションを作成するときに私は偽のフラグを使用したと言われていますが、まだそれは働いていません。

答えて

1

animateAttack()これにご変更してみてください:

function animateAttack() 
{ 
    player.animations.play('attack', 60, false); 
} 

最初のパラメータは、第三のかどうか、フレームレート(60がデフォルトである)でアニメーションを再生するには(あなたのコードのように)、第二がされていますアニメーションをループするかどうかを指定します。 documentationには、前の値がloopであるため、このアニメーションでfalseに設定しても、何らかの理由でtrueになっている可能性があります。

関連する問題