Делаю простенький шутер в C#(именно в форме) и у меня вопрос - как сделать пулю так, чтобы при каждом нажатии на кнопку, выпускалась новая пуля?
Пример кода:
if (e.KeyCode == Keys.F)
{
pictureBox3.Location = new Point(pictureBox1.Location.X + 34, pictureBox1.Location.Y + 18);
pictureBox3.Visible = true;
timer1.Enabled = true;
Другие языки программирования и технологии
Помогите с игрой в C#
Во-первых, выкинь PictureBox. Он предназначен не для того, чтобы пули из него делать.
Во-вторых, понадобится список, где будут храниться данные о пулях. Этими данными будут их координаты, так что список структур Point будет в самый раз:
List< Point > bullets = new List< Point >();
При выстреле (нажатии на кнопку) нужно лишь добавлять в этот список точку, соответствующую начальной позиции пули:
if (e.KeyCode == Keys.F) {
bullets.Add(new Point(pictureBox1.Location.X + 34, pictureBox1.Location.Y + 18));
}
Рисовать пули будем, как и положено, в обработчике события Paint (изображение из pictureBox1 тоже следовало бы, если по уму делать). Соответственно понадобится объект Image, в который будет загружено изображение пули:
Image bullet_image = Image.FromFile("пуля. jpg");
само рисование:
private void Form1_Paint(object sender, PaintEventArgs e) {
foreach (Point pos in bullets) { // для каждой пули в списке
e.Graphics.DrawImage(bullet_image, pos); // рисуем изображение в позиции пули
e.Graphics.ExcludeClip(new Rectangle(pos, bullet_image.Size)); // добавляем в область отсечения
}
e.Graphics.Clear(this.BackColor); // заливаем всё остальное цветом фона
}
Вместо простой заливки можно, естественно, выводить в качестве фона какое-нибудь изображение.
Перемещение пуль будет производиться по таймеру, который должен быть включен постоянно:
private void timer1_Tick(object sender, EventArgs e) {
int i = 0;
while (i < bullets.Count) { // перебираем все имеющиеся в списке пули
// если пуля вышла за пределы формы, то удаляем её:
if (!this.ClientRectangle.Contains(bullets[i])) bullets.RemoveAt(i);
else { // если пуля всё ещё на форме, то перемещаем её в нужную сторону:
bullets[i] = new Point(bullets[i].X + 5, bullets[i].Y); // в данном случае - сдвигаем на 5 пикселей вправо
i++; // переходим к следующей пуле
}
}
this.Invalidate(); // в конце вызываем перерисовку формы, чтобы обновить изображение
}
Во-вторых, понадобится список, где будут храниться данные о пулях. Этими данными будут их координаты, так что список структур Point будет в самый раз:
List< Point > bullets = new List< Point >();
При выстреле (нажатии на кнопку) нужно лишь добавлять в этот список точку, соответствующую начальной позиции пули:
if (e.KeyCode == Keys.F) {
bullets.Add(new Point(pictureBox1.Location.X + 34, pictureBox1.Location.Y + 18));
}
Рисовать пули будем, как и положено, в обработчике события Paint (изображение из pictureBox1 тоже следовало бы, если по уму делать). Соответственно понадобится объект Image, в который будет загружено изображение пули:
Image bullet_image = Image.FromFile("пуля. jpg");
само рисование:
private void Form1_Paint(object sender, PaintEventArgs e) {
foreach (Point pos in bullets) { // для каждой пули в списке
e.Graphics.DrawImage(bullet_image, pos); // рисуем изображение в позиции пули
e.Graphics.ExcludeClip(new Rectangle(pos, bullet_image.Size)); // добавляем в область отсечения
}
e.Graphics.Clear(this.BackColor); // заливаем всё остальное цветом фона
}
Вместо простой заливки можно, естественно, выводить в качестве фона какое-нибудь изображение.
Перемещение пуль будет производиться по таймеру, который должен быть включен постоянно:
private void timer1_Tick(object sender, EventArgs e) {
int i = 0;
while (i < bullets.Count) { // перебираем все имеющиеся в списке пули
// если пуля вышла за пределы формы, то удаляем её:
if (!this.ClientRectangle.Contains(bullets[i])) bullets.RemoveAt(i);
else { // если пуля всё ещё на форме, то перемещаем её в нужную сторону:
bullets[i] = new Point(bullets[i].X + 5, bullets[i].Y); // в данном случае - сдвигаем на 5 пикселей вправо
i++; // переходим к следующей пуле
}
}
this.Invalidate(); // в конце вызываем перерисовку формы, чтобы обновить изображение
}
PictureBox bullet = new PictureBox();
bullet.Location = ...
bullet.Size = ...
bullet.Location = ...
bullet.Size = ...
Похожие вопросы
- Помогите с домашним задание C#
- скрипт на траффик в игре на c# в unity
- Пожалуйста! Помогите выбрать: java или c
- Помогите решить задачи на C#
- Помогите написать программу по C++
- Помогите с заданием на C++
- Помогите с заданием по C#
- помогите написать программу на c++
- Помогите с матрицей в C++,заранее спасибо.
- СРОЧНО! Кто поможет создать игру?