Форум: "Игры";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
ВнизIMAGE MOVE Найти похожие ветки
← →
Andy_ (2003-06-30 07:09) [0]Доброго время суток. Отвветьте мне на такой вопрос пожалуйста, если можно, то с примером. Как заставить двигаться Image по форме с помощью кнопок (например стрелок). Зарание спасибо.
← →
MBo (2003-06-30 07:20) [1]top и left менять, вестимо.
И DoubleBuffered у формы в true поставить не помешает.
А вообще это плохой путь - лучше просто картинку на форме рисовать.
← →
Andy_ (2003-06-30 13:53) [2]Если через Image плохо, тогда подскажите пожалуйста как это сотворить, через Canvas что ли рисовать?, если это так, то помогите мне с решением этого вопроса и если можно, то напишите код, чтобы я смог поразбираться немного. Спасибо.
← →
Mihey (2003-06-30 16:38) [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
( 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-07-01 14:55) [4]Все это я понимаю, но мне надо, чтобы при нажатии на кнопку (стрелочки) на клавиатуре, фигура двигалась влево, вправо, вверх, вниз. Помогите пожалуйста, заранее спасибо.
← →
pasha676 (2003-07-01 15:20) [5]Задача сводиться к
1) Отрисовка изображения в координатах x,y
с этим проблем нет?
2)Изменение переменной x по нажатию "вправо" "влево"
и то же для y и "верх" "низ"
Какие проблеммы?
3) По таймеру выполняем пункт 1 - тоже проблем не должно быть.
Теперь вопросы.
← →
Andy_ (2003-07-01 15:44) [6]Меня больше интересует синтаксис.
← →
MeF88 (2003-07-01 16:31) [7]Блин люди, пишите игры хотя бы на DelphiX. TImage - такой изврат... Или Direct3D. А лучше OpenGL. http://www.mirgames.ru/
← →
cyborg (2003-07-01 16:55) [8]MeF88 © (01.07.03 16:31)
Тут спрашивают синтаксис присвоения ХУ значения, а ты какие-то дельфииксы, опенгеели :)
← →
Andy_ (2003-07-01 17:13) [9]В смысле опенгеели это чего такое, а насчет XY попрошу все таки помочь, если не сложно, заранее благодарен.
← →
cyborg (2003-07-01 21:44) [10]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 и прочие....
← →
Mihey (2003-07-01 22:16) [11]Блин, читай ради бога:
http://www.delphimaster.ru/articles/move-image.html
← →
Andy_ (2003-07-03 07:42) [12]Я конечно благодален вам за инфу такого рода, но мне надо немного другое, мне надо чтобы при нажатии кнопки (стрелки) на клавиатуре происходил процесс движения. Вы меня извените, но я немного ламер и Delphi занимаюсь недавно, поэтому я такой настойчивый. Спасибо.
← →
pasha676 (2003-07-03 10:18) [13]
> но я немного ламер
Не скромничай. Немного - это очень скромно :). Шутка не со зла. По правде говоря, даже не знаю что тебе ответить. Можно сразу написать ответ (но боюсь таким методом ты ничему не научишься), а можно описать концепцию виндов и как хватать мессаги. Остановлюсь на промежуточном варианте. Многие понятия сильно упрощены для понимания.
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-04 18:20) [14]Огромное спасибо за столь исчерпывающий ответ, нет насамом деле, данный способ познания програмирования неприемлим т.к. нет непосредственого влияния на меня, т.е. сложно объяснить человеку если он не знает (это я про себя). Поэтому последую вашему совету и буду переворачивать горы инфы по Delphi. Ну ладно все равно спасибо.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c