![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Пытаюсь изобрести велосипед - делаю игрульку типа космической стрелялки. Привязал к клавишам "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
|
||||
|
||||
![]() У тебя условие неправильное, в одном выражении и равенство и неравенство
|
#3
|
||||
|
||||
![]() Про ошибку тебе уже сказали, а для сравнение на столкновение лучше использовать IntersectRect:
Код:
if IntersectRect(DestRect, Image1.BoundsRect, Image2.BoundsRect) then столкнулись Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#4
|
|||
|
|||
![]() Цитата:
Пусть сначала научится правильно писать, а затем научится использовать непонятную функцию Вот критерий попадания центра 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
|
|||
|
|||
![]() Я тут погуглил. оказывается можно еще как-то так сделать:
Код:
if (image2.Left div 2>Shape1.Left) AND (image2.Left div 2<Shape1.Left+shape1.Width) then Shape1.Visible:=false Но у меня ни так ни так не получается. Что я напутал? Если нужно, могу исходник выложить |
#6
|
|||
|
|||
![]() Вписал ваш код:
Код:
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 Цитата:
P.S Я, наверное, забыл объяснить, Image2 - это пуля. Shape1 - это мишень. Последний раз редактировалось Zo_Omer, 31.01.2012 в 12:02. |
#7
|
||||
|
||||
![]() Как все любят сложности, вместо того, чтобы использовать 1 строчку, начинаем городить огород с условиями. Вперёд и с песней.
![]() Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#8
|
||||
|
||||
![]() Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
|||
|
|||
![]() Эм... ну так что насчет ошибки? Мой предыдущий пост
|
Этот пользователь сказал Спасибо Zo_Omer за это полезное сообщение: | ||
Admin (30.09.2013)
|
#10
|
||||
|
||||
![]() Скобки позакрывай все, как можна игру делать а синтаксиса не знать даже?
![]() Эт я так, несерьезно ![]() Но такие элементарные вещи как открытие/закрытие скобок нужно знать |
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
Zo_Omer (18.05.2012)
|