![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IMAGE MOVE
Andy_ © (2003-06-30 07:09:00)
Доброго время суток. Отвветьте мне на такой вопрос пожалуйста, если можно, то с примером. Как заставить двигаться Image по форме с помощью кнопок (например стрелок). Зарание спасибо.
Andy_ (2003-07-04 18:20:00) [1]
Огромное спасибо за столь исчерпывающий ответ, нет насамом деле, данный способ познания програмирования неприемлим т.к. нет непосредственого влияния на меня, т.е. сложно объяснить человеку если он не знает (это я про себя). Поэтому последую вашему совету и буду переворачивать горы инфы по Delphi. Ну ладно все равно спасибо.
pasha676 (2003-07-03 10:18:00) [2]
> но я немного ламер
Не скромничай. Немного - это очень скромно :). Шутка не со зла. По правде говоря, даже не знаю что тебе ответить. Можно сразу написать ответ (но боюсь таким методом ты ничему не научишься), а можно описать концепцию виндов и как хватать мессаги. Остановлюсь на промежуточном варианте. Многие понятия сильно упрощены для понимания.
1) События, сообщения и эвенты. Одна из основ осознаниия устройства виндов - это понятие событие (message). Так вот обычная виндос прога ловит месаги. Месаги посылаються фактически по любому поводу и бес повода. По таймеру идет месага, по перемещению мышки месага, по нажатию кнопки - тоже месага. Твоя задача отловить месагу (допустим нажати) В Дельфи месаги фактически заменены на эвенты - события. Самый простой и доступный вариант их использование через среду Дельфи. Берем напрмер тот же эвент на нажатие клавише на клавиатуре. Берем форму в редакторе. Слева у тебя будет такая приблуда Дельфевая как Object Inspector. там будет индицироваться имя ми класс компонента (по умолчанию Form1:TForm). Будет закладка свойств (properties) и событий (evets). Выбираем события. Их много разных, но нажатие на клавишу - OnKeyDown. Дважды кликаешь - попадаешь в обработчик. В обработчике пишешь что надо. Тебе надо определить какая клавиша и сделать на нее реакцию.
Определение клавиши - выбираешь в эвентах в инспекторе онкейдаун эвент и нажимаешь F1. Хэлп - штука полезнаю. В дальнейшем на ней и работай. Там видишь параметр Key. Если онем почитать - то это и есть код нажатой клавиши. Можно так же посмотреть пример из хэлпа и Virtual Key Code. Ну и написать на паскале собственно обработчик. Например изменение координаты Y рисунка при нажатии на клаву "вверх"
if Key=VK_UP then Dec(Ypicture);
Если и сейчас не понял - то рекомендую купить бук и читать, читать, читать.... Впрочем это рекомендую в любом случае.
Andy_ (2003-07-03 07:42:00) [3]
Я конечно благодален вам за инфу такого рода, но мне надо немного другое, мне надо чтобы при нажатии кнопки (стрелки) на клавиатуре происходил процесс движения. Вы меня извените, но я немного ламер и Delphi занимаюсь недавно, поэтому я такой настойчивый. Спасибо.
Mihey (2003-07-01 22:16:00) [4]
Блин, читай ради бога:
http://www.delphimaster.ru/articles/move-image.html
cyborg (2003-07-01 21:44:00) [5]
X:=0; X:=1; X:=-1; X:=-X;
Y:=0; Y:=1; Y:=-1; Y:=-Y;
Движение влево:
X:=X-1; или Dec(X); или Dec(X,1);
Движение вправо:
X:=X+1; или Inc(X); или Inc(X,1);
Движение вверх:
Y:=Y-1; или Dec(Y); или Dec(Y,1);
Движение вниз:
Y:=Y+1; или Inc(Y); или Inc(Y,1);
Так же смотрим в справке:
+ - * / Div Mod Shl Shr Or Xor And Not и прочие....
Andy_ (2003-07-01 17:13:00) [6]
В смысле опенгеели это чего такое, а насчет XY попрошу все таки помочь, если не сложно, заранее благодарен.
cyborg (2003-07-01 16:55:00) [7]
MeF88 © (01.07.03 16:31)
Тут спрашивают синтаксис присвоения ХУ значения, а ты какие-то дельфииксы, опенгеели :)
MeF88 (2003-07-01 16:31:00) [8]
Блин люди, пишите игры хотя бы на DelphiX. TImage - такой изврат... Или Direct3D. А лучше OpenGL. http://www.mirgames.ru/
Andy_ (2003-07-01 15:44:00) [9]
Меня больше интересует синтаксис.
pasha676 (2003-07-01 15:20:00) [10]
Задача сводиться к
1) Отрисовка изображения в координатах x,y
с этим проблем нет?
2)Изменение переменной x по нажатию "вправо" "влево"
и то же для y и "верх" "низ"
Какие проблеммы?
3) По таймеру выполняем пункт 1 - тоже проблем не должно быть.
Теперь вопросы.
Andy_ (2003-07-01 14:55:00) [11]
Все это я понимаю, но мне надо, чтобы при нажатии на кнопку (стрелочки) на клавиатуре, фигура двигалась влево, вправо, вверх, вниз. Помогите пожалуйста, заранее спасибо.
Mihey (2003-06-30 16:38:00) [12]TImage использовать не плохо, если ты это делаешь для оформительных целей. А вот игру писать на TImage не стоит.
Вот код юнита:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
btnStart: TButton;
fon: TImage;
ball: TImage;
Timer1: TTimer;
procedure btnStartClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
dx, dy: Integer;
implementation
{$R *.DFM}
procedure TForm1.btnStartClick(Sender: TObject);
begin
If not Timer1.Enabled then
Timer1.Enabled := True else
Timer1.Enabled := False;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If (Ball.Left + Ball.Width + dx) >= (Fon.Left + Fon.Width) then
dx := -dx;
If (Ball.Top + Ball.Height + dy) >= (Fon.Top + Fon.Height) then
dy := -dy;
If (Ball.Left + dx) <= (Fon.Left) then
dx := -dx;
If (Ball.Top + dy) <= (Fon.Top) then
( Sender: TObject) [3]TImage использовать не плохо, если ты это делаешь для оформительных целей. А вот игру писать на TImage не стоит.
Вот код юнита:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
btnStart: TButton;
fon: TImage;
ball: TImage;
Timer1: TTimer;
procedure btnStartClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
dx, dy: Integer;
implementation
{$R *.DFM}
procedure TForm1.btnStartClick(Sender: TObject);
begin
If not Timer1.Enabled then
Timer1.Enabled := True else
Timer1.Enabled := False;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If (Ball.Left + Ball.Width + dx) >= (Fon.Left + Fon.Width) then
dx := -dx;
If (Ball.Top + Ball.Height + dy) >= (Fon.Top + Fon.Height) then
dy := -dy;
If (Ball.Left + dx) <= (Fon.Left) then
dx := -dx;
If (Ball.Top + dy) <= (Fon.Top) then
dy := -dy;
Ball.Left := Ball.Left + dx;
Ball.Top := Ball.Top + dy;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
dx := 2;
dy := 2;
DoubleBuffered := True;
end;
end.
Это дело забирай отсюда:
http://www.hot.ee/mvps3/test.rar
Andy_ (2003-06-30 13:53:00) [13]
Если через Image плохо, тогда подскажите пожалуйста как это сотворить, через Canvas что ли рисовать?, если это так, то помогите мне с решением этого вопроса и если можно, то напишите код, чтобы я смог поразбираться немного. Спасибо.
MBo (2003-06-30 07:20:00) [14]
top и left менять, вестимо.
И DoubleBuffered у формы в true поставить не помешает.
А вообще это плохой путь - лучше просто картинку на форме рисовать.