Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
1

Стрельба по тарелочкам

01.05.2014, 01:44. Показов 1577. Ответов 7
Метки нет (Все метки)

Подскажите, пожалуйста, как прописать движение изображения тарелки? По заданию у меня должна траектория пули рисоваться и траектория тарелки, движущейся по произвольному радиусу.
0
Миниатюры
Стрельба по тарелочкам  
Вложения
Тип файла: rar UFO.RAR (1.02 Мб, 25 просмотров)
Заказывайте контрольные, курсовые и дипломы здесь.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2014, 01:44
Ответы с готовыми решениями:

Стрельба по тарелочкам
Очень нужна помощь,чтобы исправить ошибку в уже написанной программе. Стрельба по тарелочкам.Ружье...

Стрельба по тарелочкам
Собственно столкнулся с некой проблемой. Сначала напишу условие: Начал писать программу, написал...

Стрельба
Привет всем! Пишу FPS шутер. Подскажите пожалуйста код, где персонаж будет стрелять. Чтобы,...

Стрельба
Здравствуйте. Пишу игру на подобие Doodle Jump. Подскажите пожалуйста, как сделать стрельбу своего...

7
Модератор
63400 / 47085 / 32454
Регистрация: 18.05.2008
Сообщений: 114,133
01.05.2014, 06:49 2
Лучший ответ Сообщение было отмечено yuppi как решение

Решение

Цитата Сообщение от yuppi Посмотреть сообщение
тарелки, движущейся по произвольному радиусу.
Вращение тарелки можно сделать так.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var
  Form1: TForm1;
  canvas: TCanvas;
  xc,yc,r1:integer;
  u:real
....................................
procedure TForm1.FormCreate(Sender: TObject);
begin
  Canvas.Create;
  Timer1.Interval:=10;
  Timer2.Interval:=50;
  xc:=650;  //координаты
  yc:=200;  //центра вращения
  r1:=100;  //радиус вращения
  u:=0;     //угол поворота
end;
....................................................
procedure TForm1.Timer2Timer(Sender: TObject);//второй таймер для вращения тарелки
var x,y:integer;
begin
x:=xc+round(r1*cos(u));
y:=yc-round(r1*sin(u));
Image1.Left:=x;
Image1.Top:=y;
u:=u+0.1;
 
end;
1
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
01.05.2014, 08:19  [ТС] 3
Спасибо большое. Очень здорово вышло! Не подскажите еще, как число попаданий в таком случае считать? И убрать траекторию после завершения выстрела? А то некрасиво получается, когда тарелка словно ластиком траекторию стирает.
0
Миниатюры
Стрельба по тарелочкам  
Модератор
63400 / 47085 / 32454
Регистрация: 18.05.2008
Сообщений: 114,133
01.05.2014, 09:07 4
Лучший ответ Сообщение было отмечено yuppi как решение

Решение

Цитата Сообщение от yuppi Посмотреть сообщение
как число попаданий в таком случае считать?
По идее если координаты пули попали в область Image1, то попадание.
Delphi
1
2
if (x > Image1.Left) and (x < Image1.Left+Image1.Width)
    and (y > Image1.Top) and (y < Image1.Top+Image1.Height)
Но как и куда это в Вашем проекте вставить до меня не доходит.
1
Заблокирован
01.05.2014, 11:38 5
yuppi,
Вся проблема в том, что вы не умеете такие вещи делать. Отсюда затирание траектории и прочее.
Вы должны использовать типичную двойную буферизацию.
У вас должно быть три битмапа для этого.
Первый - это резервный. На нём рисуется общий фон (небо, травка и так далее)
Второй - сборочный. На нём всё собирается.
Сначала на него копируется фон из первого битмапа
Далее уж идёт наложение спрайтов.
В вашем случае.
Сначала рисуете траекторию, потом сверху ляпаете спрайты. И не забудьте про прозрачность спрайтов.
Если траектория после выстрела не нужна, то и не рисуйте её, и тогда она не появится.
Готовый фрейм отрисовывается на 3 битмапе, который выполняет функцию перерисовки. Он в обработчике события OnPaint порта отображения рисуется на канвасе этого порта.

Что до попадания в цель. Тут просто нужно отслеживать траекторию полёта пули. Поэтому её удобнее реализовать линией безе. И отслеживать траекторию тарелки.
Это реализуется очень просто. У вас при расчёте каждого шага траектории остаются текущиие координаты. У летающей тарелки есть так называемая "зона поражения." В простейшем случае это некая часть спрайта. В более сложном случае, для учёта кривизны поверхности, используется метод маски.
Маской может служить тот же фон спрайта. как только координаты пули войдут в зону спрайта, отслеживаем цвета на спрайте. Если это цвет фона, значит пуля ещё не достигла объекта. Если не цвет фона - фиксируется попадание.
1
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
03.05.2014, 19:53  [ТС] 6
Puporev, вот так у меня считалось число попаданий. Но это для неподвижной тарелки.
Delphi
1
2
3
4
5
6
7
if 200-y*70 >= 250 then
  begin
    x := 100+x*70;
    Timer1.Enabled := false;
    if (x > 510) and (x < 620) then popadanij:=popadanij+1;
    Label3.Caption:=IntToStr(Round(popadanij));
  end;
Я исправила кое-какие моменты. Попроще сделала. Насчет попаданий помогите, пожалуйста.
0
Вложения
Тип файла: rar UFO 2.RAR (1.02 Мб, 28 просмотров)
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
03.05.2014, 20:42  [ТС] 7
Кто-нибудь! Пожалуйста... Может подскажите еще как сделать чтобы при достижении пулей (красная точка) цели (тарелка) или асфальта (серый прямоугольник внизу формы) траектория стиралась? Я предполагаю использование для этого Form1.Refresh. Как записать это условие?
0
Миниатюры
Стрельба по тарелочкам  
Заблокирован
04.05.2014, 23:19 8
yuppi,
вам же сказали. делать как следует.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2014, 23:19

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Стрельба с ЛА по ЛА
Стрельба с ЛА по ЛА может производиться с трех дальностей: 900, 600, и 300м. Вероятность того , что...

Стрельба
Как создать стрельбу очередями. При стрельбе одним патроном в общемто понятно, а очередью нужно...

стрельба 2Д
Вот такой код для пули у меня есть: using System.Collections; using System.Collections.Generic;...

Стрельба
Помогите решить задачку... Размер мишени для стрельбы задается координатам центра концентричных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.