Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
PolKulo
1 / 1 / 2
Регистрация: 18.05.2015
Сообщений: 64
1

Останавливать программу при соприкосновении двух Image

21.05.2015, 11:47. Просмотров 1332. Ответов 25
Метки нет (Все метки)

Как сделать так что бы Image когда дотронится с другой Image программа останавливалось (Flappy bird) птичка с трубой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2015, 11:47
Ответы с готовыми решениями:

Надо что бы при нажатии на какой либо Image с картинкой, картинка перекидывалась в пусто Image, а Image на который нажали исчезал.
Имеется 4 Image в 3 из них находятся картинки, а 4 пустой. Надо что бы при...

Ping-Pong. Вывести надпись Game Over при соприкосновении мячика с полем
Сделала Игру на Delphi. Но появилась одна загвоздка.Нужно, чтобы при...

При нажатии на Image построить линию к другому выбранному Image
Всем доброго времени суток. Собственно сделано перемещение Image'ов. Нужно...

Drag and Drop с Image. Растягивает окно при перемещении Image
Растягивает окно формы при перемещении Image. Как избавится от такого недуга )

Работа с координатами на двух Image
Вопрос не столько по программированию, прошу простить. Есть image1 и...

25
NIKOLAYY
819 / 717 / 339
Регистрация: 22.09.2012
Сообщений: 4,994
28.05.2015, 22:20 21
PolKulo,
Добавил Рекорд (количество пролетевших труб) и уменьшил скорость самой игры там в исходе коменнтарий расписал.
1
Вложения
Тип файла: rar Flappy Bird.rar (269.2 Кб, 4 просмотров)
PolKulo
1 / 1 / 2
Регистрация: 18.05.2015
Сообщений: 64
05.06.2015, 21:21  [ТС] 22
NIKOLAYY, Здравствуйте Николай. Это я с Флаппи Бёрд . У же готов сдавать работу. Прошу о помощи? В коде в целом я разобрался процедуры опишу, расскажу что да как. Но я не очень понимая пару частей кода. Можете ли вы мне описать их поподробнее что означает каждое слова. Препады очень придираются, боюсь не отвечу. Я скину код. И выделю части которые не понятны. Заранее спасибо за помощь
0
Вложения
Тип файла: rar Flappy Bird.rar (278.8 Кб, 3 просмотров)
NIKOLAYY
819 / 717 / 339
Регистрация: 22.09.2012
Сообщений: 4,994
06.06.2015, 08:34 23
PolKulo,
Вот за этот кусок кода что ли?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 //вниз летит
  if Ptiniz = True then
  begin
    Timer2.Interval := 30; //быстрее скорость
    Inc(Ptish);
    Ptisa.Top := Ptisa.Top + Ptish;
  end;
 //вверх летит
  if Ptiniz = False then
  begin
    Timer2.Interval := 10;
    Inc(Ptiinc);
    Ptisa.Top := Ptisa.Top - 4;
 
    if Ptiinc = 10 then
    begin
      Ptiniz := True;
      Ptiinc := 0;
    end;
  end;
Я сча непомню я давно же писал этот код, но смысл кода помню, Когда птица летит вниз я делал так что бы не просто вниз летела, а с ускорением. Код то как бы мой на сто процентов но птица летела с ускорением вниз!
Сча если по по деталям его разобрать нужно "шевелить" все переменные спроси лучше у krapotkin или у northener че там значит по деталям этот код то!
1
PolKulo
1 / 1 / 2
Регистрация: 18.05.2015
Сообщений: 64
06.06.2015, 14:05  [ТС] 24
krapotkin, Здравствуйте мне вас посоветовал NIKOLAYY он мне скинул исходник с Flappy Bird но так как он делай игру очень давно (я его попросил поподробнее описать часть кода описать пока не может). Я её передал убрал лишнего. Но часть кода не понимаю . Можете ли вы мне помочь. Заранее спасибо
0
Вложения
Тип файла: rar Курсавая-Flappy Bird.rar (279.4 Кб, 4 просмотров)
Joey
Форумчанин
831 / 552 / 219
Регистрация: 05.05.2015
Сообщений: 3,211
Записей в блоге: 2
06.06.2015, 14:51 25
PolKulo, Components[] - это массив, который содержит указатели на ВСЕ компоненты твоего проекта. if (Components[i] as TImage) означает Компонент индекса i, рассматриваемый как объект TImage (так надо, приходится объяснять программе, какого типа компонент). У каждого компонента i, увеличивая i на единицу, проверяем имя. Таким образом мы пробегаемся по всем компонентам программы, и смотрим, если данный компонент не Ptisa и если он TImage, то проверяем intersect - то есть пересечение

Это я, конечно, грубо объяснил, пытался сделать доступнее для новичка
1
NIKOLAYY
819 / 717 / 339
Регистрация: 22.09.2012
Сообщений: 4,994
09.06.2015, 20:43 26
PolKulo,
Таймер-1 отвечает за движение птицы вверх и вниз она только вертикально может двигаться.
Таймер-2 отвечает за движение труб, они постоянно двигаются влево и только горизонтально.

Птица не летит вперед как ты понял, она стоит на месте а движется сам фон, вернее бордюр и трубы, таким образом кажется что птица летит горизонтально.

Ну там тебе Joey обьяснил правильно за тот кусок кода, и вот в этом месте мы мы проверяем имагу что бы она была не птицей иначе птица так же будет двигаться влево вместе с трубами!
Delphi
1
2
3
  //двигаем трубы
    if (Components[i] as TImage).Name <> 'Ptisa' then
       (Components[i] as TImage).Left := (Components[i] as TImage).Left - 2;
Этот код что выше он немного сложнее он в цикле проверяет все компоненты имаги в которых заложены трубы и двигает их влево. Ну иначе можно переписать этот код на более простой с гораздо более количеством строк типа Image6.Left := Image6.Left -2; но тогда двигать придется каждую имагу-трубу в отдельности!

Ну код ниже я тебе его раскомментировал
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
28
29
30
31
32
33
   // От отсюда. Пробавал упростить код своим . Но не очень играбельно станавилось.
   // А в вашем  не очень понимаю   что за что отвечает.
 
 //вниз летит
 //если птица летит вниз, а она постоянно летит вниз если пробел не нажимать
 //то все настройки по полету птицы вверх тут работать не должны стоит флаг Ptiniz = True
  if Ptiniz = True then
  begin
    Timer2.Interval := 30; //быстрее скорость
    Inc(Ptish); //счетчик для ускорения
    Ptisa.Top := Ptisa.Top + Ptish; //летит вниз с ускорением так как счетчик Ptish работает
  end;
  
 //вверх летит
 //если птице разрешено лететь вверх, а оно разрешено если была нажата клавиша пробел
  if Ptiniz = False then
  begin
    Timer2.Interval := 10; //изменяем интервал таймера
    Inc(Ptiinc); //отсчитывает счетчик сколько птице можно подлететь вверх (10 сработок таймера)
    Ptisa.Top := Ptisa.Top - 4; //подлетает вверх
 
 //птице нельзя постоянно лететь вверх после то как ты нажал кнопку пробел
 //она должна немного подлететь и снова падать вниз если таймер тикнул 10 раз то 
 //включам флаг, ну или дирикторию полета птицы на низ! Птица снова летит вниз!
 //переменную счетчик возвращаем в исходное состояние делаем ему ноль Ptiinc := 0
    if Ptiinc = 10 then
    begin
      Ptiniz := True; //прошло 10 сработок таймера, пора птицу опускать вниз 
      Ptiinc := 0; //счетчик на ноль
    end;
  end;
 
  //до сюда
Зря ты там оба таймера ставиш на 1, там ведь все от него завязано по моим подсчетам птица должна подлетать вверх 0,3 секунды затем лететь вниз, а по твоим получается 0,01 сотую она тока вверх подлетает!

Ну или меняй тогда значения счетчков, там где у меня до 10 отсчитывал выше в коде, ты сделай до 100!
Все настройки по интервалу времени таймеров и по разным счетчкам что в программу засунул я подбирал на "глаз".
2
09.06.2015, 20:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2015, 20:43

Останавливать кнопку, движущуюся по таймеру, на определённых позициях
Есть кнопка, которая по таймеру нажимает на себя и движется вправо. Мне нужно...

Image 1 под Image 2 и Image 3 как заставить его работать как кнопку?
Имеется несколько Image, все они расположены друг на друге, Image используемый...

ListBox, Label, Image составить программу вывода
Не понимаю работу с Listboxom, не могу вывести Item (строку), в Label (через...


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

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

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