Помощь - Поиск - Пользователи - Календарь
Полная версия: Движение по карте
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Cheburashka
Решил сделать небольшой проектик.
В общем хочу сделать подобие движение по игровой карте (как в стратегиях и других играх). Работаю с OnMouseMove. Может я сделал немного глупо, но я растянул карту (Image) на всю её ширину и длину. Другого мне в голову пока, что не пришло.
Вот код движения карты вправо
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not(PtInRect(Rect(Form1.Left,
Form1.Top,
Form1.Left + Form1.Width-20,
Form1.Top + Form1.Height), ClientToScreen(Point(x, y))))
then Timer1.Enabled := true
else Timer1.Enabled := false;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
If Image1.Left >= 640 - PW then
Image1.Left := Image1.Left - 7;
end;

Но почему-то когда Image двинется немного вправо, то координаты меняются и изображение двигать можно даже на середине.
Что тут можно сделать?
volvo
Вот почему ты вызываешь Form1.Top, и так далее, но ClientToScreen(Point(x, y)) ? Чей ClientToScreen вызывается, не расскажешь? smile.gif
Cheburashka
ClientToScreen вызывается на Image.
Цитата
Вот почему ты вызываешь Form1.Top

А что мне вызывать? У меня ведь форма меньше самого изображения, а мышь вроде всегда именно на форме находится.
volvo
А попробуй-ка вот это:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled :=
PtInRect(Rect(form1.Width - 20, 0, form1.Width, form1.Height), Point(image1.Left + X, Y))
end;

(до Дельфи доберусь только послезавтра, так что пока - теоретически. Потом проверю...)

Cheburashka
volvo, так всё работает ;)
У меня ещё небольшой вопрос есть, когда происходит движение иногда проскальзывают белые полосы. Можно что-нибудь с этим сделать?
volvo
Можно попробовать установить у формы DoubleBuffered := True, это немного снизит "мерцания".
Cheburashka
Большое спасибо за помощь, мерциния теперь вовсе исчезли smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.