最近,我一直致力于像游戏这样的太空入侵者,帮助我提高编程技巧。我陷入了一些问题。我已经研究了几天了,你将如何在keyUp上进行激光射击。
这是我迄今为止的尝试;我可以让激光器发射,但是我发现为什么激光器不能继续向上移动......
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace SpaceInvaders
{
public partial class Form1 : Form
{
public int spriteX = 226;
public int spriteY = 383;
bool bulletFire = false;
int fireTimer = 8;
int laserFired;
public Form1()
{
InitializeComponent();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
public void laserFire()
{
//on laser fire i wont the bulle to move up while bullet timer is enabled
//moving up slowly with set intervals
while (bulletTimer.Enabled == true)
{
PictureBox laser = new PictureBox();
laser.BackColor = Color.Chartreuse;
laser.Width = 5;
laser.Height = 30;
laserFired = spriteY;
laserFired = laserFired - 10;
this.Controls.Add(laser);
laser.Location = new Point(spriteX, laserFired);
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
//Fire bullet
if (e.KeyCode == Keys.Up)
{
bulletFire = true;
if (bulletFire == true)
{
laserFire();
bulletTimer.Enabled = true;
}
}
//Controls Right movement
if (spriteX <448)
{
if (e.KeyCode == Keys.Right)
{
spriteX = spriteX + 20;
}
}
//Controls Left Movement
if (spriteX > 0)
{
if (e.KeyCode == Keys.Left)
{
spriteX = spriteX - 20;
}
}
//Points sprite to new location
pctSprite.Location = new Point(spriteX, spriteY);
}
private void bulletTimer_Tick(object sender, EventArgs e)
{
if (fireTimer == 0)
{
bulletTimer.Enabled = false;
}
else { fireTimer = fireTimer - 1; }
}
}
}
非常感谢帮助或建议。
答案 0 :(得分:3)
您遇到的问题是,在循环的每次迭代中,您都可以通过编写laserFired = spriteY;
来重置项目符号的y位置
然而,一旦纠正,你将遇到另一个问题:移动激光子弹的while循环仅在laserFire
方法中执行。这意味着:
当激光子弹移动时,没有其他东西可以移动(因为环路仅移动激光)
一旦激光子弹停止移动,它将永远不会再开始移动(因为你不能再次调用laserFire()
就不能回到循环中。
你需要有一个游戏循环来移动你游戏中的所有东西,而不是每个移动物体都有一个循环。
答案 1 :(得分:0)
您的计时器处理程序只会递减fireTimer
直到它为零。什么促使重新渲染激光?需要调用laserFire
来重新渲染激光。也许您打算从laserFire
致电bulletTimer_Tick
?