Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
1-49622
miracle_fox
2004-01-04 22:32
2004.01.16
как переписать итемы из листвью в файл при закрытии программы


7-49773
NikNet
2003-11-05 10:33
2004.01.16
Как перейти в RING0 из делфи


1-49519
oens
2004-01-03 09:23
2004.01.16
Сраванение


1-49555
selena
2004-01-06 07:07
2004.01.16
считывание


1-49636
alless
2004-01-04 14:28
2004.01.16
Directoria!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский