如何让武器'子弹'走向某个方向
我想从变种武器拍一个'子弹'朝某个方向射击,这个子弹实际上是一个口袋妖怪的球,因为我只是在做一个练习游戏。如何让武器'子弹'走向某个方向
我似乎无法让'子弹'走向我想要的方向,我输入了:weapon.body.velocity.x = -100;在:if(cursors.left.isDown) 但这不起作用,当我按任何键时,屏幕将冻结。
请帮我让'子弹'走向我想要的方向。
var items;
var game;
var player;
var weapon;
var cursors;
var fireButton;
function addItems() {
items = game.add.physicsGroup();
createItem(100, 400, 'coin');
}
function createItem(left, top, image) {
var item = items.create(left, top, image);
item.animations.add('spin');
item.animations.play('spin', 10, true);
}
function itemHandler(player, item) {
item.kill();
}
window.onload = function() {
game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render });
function preload() {
game.stage.backgroundColor = ('#424242');
game.load.spritesheet('coin', 'coin.png', 36, 44);
game.load.spritesheet('player', 'hero.png', 64, 64);
game.load.spritesheet('bullet', 'Pokeball.png');
}
function create() {
player = this.game.add.sprite(100, 200, 'player');
// ANIMATION FOR PLAYER CONTROLS
down = player.animations.add('down', [0,1,2,3], 10, true);
left = player.animations.add('left', [4,5,6,7], 10, true);
right = player.animations.add('right', [8,9,10,11], 10, true);
up = player.animations.add('up', [12,13,14,15], 10, true);
// enable physics in the game (can't go through walls, gravity, etc.)
game.physics.enable(player, Phaser.Physics.ARCADE);
game.physics.startSystem(Phaser.Physics.P2JS);
game.physics.startSystem(Phaser.Physics.ARCADE);
game.physics.p2.enable(player);
player.body.setSize(30, 45, 16, 12);
player.body.immovable = false;
// enable keyboard arrows for controls
cursors = game.input.keyboard.createCursorKeys();
// camera will follow the character
game.camera.follow(player);
addItems();
// Creates 1 single bullet, using the 'bullet' graphic
weapon = game.add.weapon(1, 'bullet');
// The bullet will be automatically killed when it leaves the world bounds
weapon.bulletKillType = Phaser.Weapon.KILL_WORLD_BOUNDS;
// Because our bullet is drawn facing up, we need to offset its rotation:
// The speed at which the bullet is fired
weapon.bulletSpeed = 400;
game.physics.arcade.enable(player);
// Tell the Weapon to track the 'player' Sprite, offset by 14px horizontally, 0 vertically
weapon.trackSprite(player, 30, 0);
cursors = this.input.keyboard.createCursorKeys();
fireButton = this.input.keyboard.addKey(Phaser.KeyCode.SPACEBAR);
}
function update() {
game.physics.arcade.overlap(player, items, itemHandler);
// PLAYER CONTROLS
player.body.velocity.set(0);
// player presses left key
if (cursors.left.isDown)
{
player.body.velocity.x = -100;
player.play('left');
}
// player presses right key
else if (cursors.right.isDown)
{
player.body.velocity.x = 100;
player.play('right');
}
// player presses up key
else if (cursors.up.isDown)
{
player.body.velocity.y = -100;
player.play('up');
}
// player presses down key
else if (cursors.down.isDown)
{
player.body.velocity.y = 100;
player.play('down');
}
// player does not press anything
else
{
player.animations.stop();
}
if (fireButton.isDown)
{
weapon.fire();
}
}
function render() {
weapon.debug();
}
}
<!DOCTYPE html>
<html lang="en">
\t <head>
\t \t <meta charset="utf-8">
\t \t <title>Simple Canvas Game</title>
<style>
html {
background: black
}
canvas {
margin: auto;
}
</style>
\t </head>
\t <body>
<script src="phaser.js"></script>
\t \t <script src="game.js"></script>
\t </body>
</html>
尝试改变
weapon.trackSprite(player, 30, 0);
到
weapon.trackSprite(player, 30, 0, true);
移相器的文件说,如果你传递true作为第四个参数,那么它会跟随精灵的旋转。
编辑:您目前没有做任何旋转你的精灵,那么改变你在哪里检查球员改变精灵的方向的角度:
if (cursors.left.isDown)
{
player.angle = 180;
}
else if (cursors.right.isDown)
{
player.angle = -90;
}
else if (cursors.up.isDown)
{
player.angle = 90;
}
// player presses down key
else if (cursors.down.isDown)
{
player.angle = 0;
}
这也将旋转你的玩家精灵,所以也许这不是你想要的。
现在它只是拍摄左大声笑@VasilyKushakov – hannacreed
我编辑了我的答案来解决这个问题。我认为子弹跟踪你的精灵的旋转,所以如果你在玩家按下箭头键的时候旋转精灵,它应该可以工作,或者至少让你朝着正确的方向前进。 –
这是有效的,除了我不希望我的播放器翻转和周围哈哈,有没有一种方法可以旋转精灵的边界,而不是图像本身?这样子弹就可以听到正在旋转的精灵边界的旋转,但图像会保持不变? @VasilyKushakov – hannacreed
试试这个; weapon.body.velocity.x - = 100; –
@KrisJ。当我点击任何键时它仍然冻结。 – hannacreed
你没有得到任何错误? –