我正在研究太空射击游戏并遇到这个问题:
我的太空船发射子弹。子弹以船为中心。目前所有的子弹都是单发。
现在我想拥有的是这艘船的双重火力。基本上这意味着我必须将镜头加倍并将它们放在左右两侧 船的一侧,对吧?但我不知道该怎么做。
我遇到的另一个问题是当我改变子弹的x和y坐标以便将子弹从船的中心移动到左边(或右边)并旋转船和火时,我得到一个子弹的奇怪行为。在这种情况下,它们从左侧移动到中心,反之亦然,指的是船(旋转和射击时)。
请 - 有任何人知道问题可能在哪里以及如何做到这一点?我非常感谢任何帮助。 TIA:!)
private function autoShoot(step:Number):void {
projectileManager.projectilePoolCount = projectileManager.projectilePool.length - 1;
asteroidManager.asteroidCount = asteroidManager.asteroids.length;
if (projectileManager.lastProjectileShot > projectileOffset && projectileManager.projectilePoolCount > 0 &&
playerStarted && asteroidManager.asteroidCount > 0 && projNumber < projectileNumber)
{
dispatchEvent(new CustomEventSound(CustomEventSound.PLAY_SOUND, Main.SOUND_PLAYER_SHOOT,
false, 0, 8, 1));
tempProjectile = projectileManager.projectilePool.pop();
tempProjectile.projectileDelayCount = 0;
var projectileRadians:Number = (player.frame / 360) * 6.28;
projShots++;
projNumber++;
if (projNumber >= projectileNumber)
{
player.startDelay = true;
}
tempProjectile.x = (player.point.x) + Math.cos(projectileRadians);
tempProjectile.y = (player.point.y) + Math.sin(projectileRadians);
tempProjectile.x = player.x + 13;
tempProjectile.y = player.y + 13;
tempProjectile.nextX = tempProjectile.x;
tempProjectile.nextY = tempProjectile.y;
tempProjectile.dx = rotationVectorList[player.frame].x;
tempProjectile.dy = rotationVectorList[player.frame].y;
tempProjectile.speed = projectileSpeed;
tempProjectile.frame = 0;
tempProjectile.bitmapData = tempProjectile.animationList[0];
tempProjectile.projectileDelay = 10;
projectileManager.projectiles.push(tempProjectile);
projectileManager.lastProjectileShot = 0;
} else {
projectileManager.lastProjectileShot += step;
}
}
答案 0 :(得分:1)
autoShoot
函数每次调用时仅触发一个射弹。每次调用只有一个tempProjectile
可以推送到projectiles
列表。
因此,一个修复可以是添加tempProjectile2
(在同一个地方tempProjectile
已定义)作为可以使用的变量。现在,在每次召唤中,射弹池都会耗尽2,只要弹出足够数量的射弹
tempProjectile = projectileManager.projectilePool.pop();
tempProjectile2 = projectileManager.projectilePool.pop();
然后相应地调整偏移量
tempProjectile.x
tempProjectile.y
tempProjectile2.x
tempProjectile2.y
其余代码等等。我唯一不清楚的是为什么tempProjectile.x和y被分配两次。
tempProjectile.x = (player.point.x) + Math.cos(projectileRadians);
tempProjectile.y = (player.point.y) + Math.sin(projectileRadians);
tempProjectile.x = player.x + 13;
tempProjectile.y = player.y + 13;
我认为只会使用第二对。
希望其余功能不会改变,因为最后将弹丸推到projectiles
列表
projectileManager.projectiles.push(tempProjectile);
projectileManager.projectiles.push(tempProjectile2);
所以用于更新和渲染的任何函数应该保持不变,假设tempProjectile没有被绑定到程序的其他地方。