Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.01.2012, 01:35
Zo_Omer Zo_Omer вне форума
Прохожий
 
Регистрация: 31.01.2012
Сообщения: 33
Репутация: 10
Лампочка Нужна помощь по типам данных

Пытаюсь изобрести велосипед - делаю игрульку типа космической стрелялки. Привязал к клавишам "a" и "d" действия (толкают влево и вправо image1) а на "w" из image1 вылетает image2 - пуля. Стоит условие, если пуля вышла за top=0 то она возвращается на место.
Корабли противники квадратики, влево-вправо двигаются.
А теперь самое сложное. Что нужно сделать так, что бы при "касании" image2 до любого из квадратиков он исчезал. Я пробовал ставить так

Код:
if Image2.Top=Shape1.Top + 61 {размер квадратика} then
Shape1.Visible:=false;

Но получается, где бы ни был "Корабль 1", как только Image2 сравняется и его Top, то Корабль исчезает. А нужно, что бы при попадании в сам Корабль он исчезал.
Делфи обижается на вот такой код:

Код:
if Image2.Top=Shape1.Top < 65
then
Shape1.Visible:=false
end;

Вот, собственно, сама ошибка: Incompatible types

Как я понял, нужно перевести что-то в какой то тип данных. А я не знаю, что именно и куда, по этому создал тему на данном форуме.
Спасибо за внимание.
Ответить с цитированием
  #2  
Старый 31.01.2012, 01:49
Аватар для Kpyc
Kpyc Kpyc вне форума
Новичок
 
Регистрация: 05.05.2011
Сообщения: 75
Версия Delphi: Turbo Delphi
Репутация: 11
По умолчанию

У тебя условие неправильное, в одном выражении и равенство и неравенство
Ответить с цитированием
  #3  
Старый 31.01.2012, 01:55
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Про ошибку тебе уже сказали, а для сравнение на столкновение лучше использовать IntersectRect:
Код:
  if IntersectRect(DestRect, Image1.BoundsRect, Image2.BoundsRect) then
    столкнулись
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 31.01.2012, 11:29
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Про ошибку тебе уже сказали, а для сравнение на столкновение лучше использовать IntersectRect:
Код:
  if IntersectRect(DestRect, Image1.BoundsRect, Image2.BoundsRect) then
    столкнулись

Пусть сначала научится правильно писать, а затем научится использовать непонятную функцию

Вот критерий попадания центра Shape1 внутрь Image2
Код:
if  (Image2.Top>=(Shape1.Top + 30)
  and
   ((Image2.Top+Image.Height)<=(Shape1.Top + 30)
  and
   (Image2.Left<=(Shape1.Left + 30)
  and
   ((Image2.Left+Image2.Width)>=(Shape1.Left + 30)
then begin
  Shape1.Visible:=false;
end;

А для полного контроля хотя бы частичного пересечения двух прямоугольников нужно написать несколько таких условий(каких именно - подбери сам - нарисуй возможные взаимные положения).
Что получится - напиши
Ответить с цитированием
  #5  
Старый 31.01.2012, 11:47
Zo_Omer Zo_Omer вне форума
Прохожий
 
Регистрация: 31.01.2012
Сообщения: 33
Репутация: 10
По умолчанию

Я тут погуглил. оказывается можно еще как-то так сделать:
Код:
if (image2.Left div 2>Shape1.Left) AND (image2.Left div 2<Shape1.Left+shape1.Width) then


Shape1.Visible:=false

Но у меня ни так ни так не получается. Что я напутал? Если нужно, могу исходник выложить
Ответить с цитированием
  #6  
Старый 31.01.2012, 11:53
Zo_Omer Zo_Omer вне форума
Прохожий
 
Регистрация: 31.01.2012
Сообщения: 33
Репутация: 10
По умолчанию

Вписал ваш код:

Код:
procedure TForm1.Timer9Timer(Sender: TObject);
begin
Image2.Top:=
Image2.Top-5;

if  (Image2.Top>=(Shape1.Top + 30)
  and
   ((Image2.Top+Image2.Height)<=(Shape1.Top + 30)
  and
   (Image2.Left<=(Shape1.Left + 30)
  and
   ((Image2.Left+Image2.Width)>=(Shape1.Left + 30) then

 begin
  Shape1.Visible:=false;
  end;
end;

Выдал ошибку :

')' expected but 'THEN' found

Цитата:
Сообщение от icWasya
Вот критерий попадания центра Shape1 внутрь Image2

P.S Я, наверное, забыл объяснить, Image2 - это пуля. Shape1 - это мишень.

Последний раз редактировалось Zo_Omer, 31.01.2012 в 12:02.
Ответить с цитированием
  #7  
Старый 31.01.2012, 21:31
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Как все любят сложности, вместо того, чтобы использовать 1 строчку, начинаем городить огород с условиями. Вперёд и с песней.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 31.01.2012, 21:34
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от icWasya
Вот критерий попадания центра Shape1 внутрь Image2
И зачем нужно проверять на попадания в центр, касание края уже не хватает?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 01.02.2012, 13:01
Zo_Omer Zo_Omer вне форума
Прохожий
 
Регистрация: 31.01.2012
Сообщения: 33
Репутация: 10
По умолчанию

Эм... ну так что насчет ошибки? Мой предыдущий пост
Ответить с цитированием
Этот пользователь сказал Спасибо Zo_Omer за это полезное сообщение:
Admin (30.09.2013)
  #10  
Старый 01.02.2012, 16:42
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Скобки позакрывай все, как можна игру делать а синтаксиса не знать даже?
Эт я так, несерьезно
Но такие элементарные вещи как открытие/закрытие скобок нужно знать
Ответить с цитированием
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение:
Zo_Omer (18.05.2012)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:07.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025