| 
| 
 | Вопрос # 2 415/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!
 У меня к вам вопрос такой.  Eсть 16 изображений и 16 графиков функций
 я пишу массив  a= 16 значений по x
 массив  b= 16 значений по y
 массив  с= 16 имен изображений
 мне нужно что бы по нажатию кнопки   'вверх' данные из ячеек
 [a1]:=x+1, b[1]:=y-1, c[1]:='1.bmp';
 
 и ничего не получается
 
 при последующем нажатии клавиши  подставлялись значения следующих ячеек масивов менялось изображение и направление движения.
 
 но при этом всегда должно быть движение вперед
 т.е x+1 - движение вперед
 
 x+1
 y-1 - движение вперед и  вниз
 
 код программы в приложении к вопросу
 Заранее спасибо.
 Приложение:Переключить в обычный режим unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ExtCtrls, StdCtrls; type  TForm1 = class(TForm)    Image1: TImage;    Timer1: TTimer;     procedure FormActivate(Sender: TObject);//    procedure Timer1Timer(Sender: TObject);    procedure FormClose(Sender: TObject; var Action: TCloseAction);    procedure FormKeyDown(Sender: TObject; var Key: Word;      Shift: TShiftState);    procedure Timer1Timer(Sender: TObject);   private    { Private declarations }  public    { Public declarations }  end; const nx=400; ny=400;var  Form1: TForm1;   a : array [1..16] of integer;   b : array [1..16] of  integer;   c: array[1..16] of string;x, y , i, j, m, n, w, h : integer;implementation {$R *.dfm}varback, bitmap, buf: Tbitmap;backRct, BitmapRct, BufRct: TRect;  procedure TForm1.FormActivate(Sender: TObject);begin n:=1;back:=Tbitmap.Create;bitmap:=Tbitmap.Create;buf:=Tbitmap.Create;back.LoadFromFile('background.bmp');form1.Image1.Canvas.Draw(0,0,back);bitmap.LoadFromFile(c[n]);bitmap.Transparent:=true;bitmap.TransparentColor:=bitmap.Canvas.Pixels[1,1];w:=bitmap.Width;h:=bitmap.Height;buf.Width:=w;buf.Height:=h;buf.Palette:=back.Palette;buf.Canvas.CopyMode:=cmSrcCopy;bufrct:=bounds(0,0,w,h);x:=-w;y:=20;backrct:=bounds(nx+x,ny+y,w,h);buf.Canvas.CopyRect(bufrct,back.Canvas,backrct);      end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);beginback.Free;bitmap.Free;buf.Free; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);   beginif key=vk_left thenbegin a[1]:=x+1; b[1]:=y-0; c[1]:='1.bmp';  a[2]:=x+2; b[2]:=y-1; c[2]:='2.bmp';  a[3]:=x+1; b[3]:=y-1; c[3]:='3.bmp';  a[4]:=x+1; b[4]:=y-2; c[4]:='4.bmp';  a[5]:=x+0; b[5]:=y-2; c[5]:='5.bmp';  a[6]:=x-1; b[6]:=y+2; c[6]:='6.bmp';  a[7]:=x-1; b[7]:=y-1; c[7]:='7.bmp';  a[8]:=x-2; b[8]:=y-1; c[8]:='8.bmp';  a[9]:=x-1; b[9]:=y-0; c[9]:='9.bmp';  a[10]:=x-2; b[10]:=y+1; c[10]:='10.bmp';  a[11]:=x-1; b[11]:=y+1; c[11]:='11.bmp';  a[12]:=x-1; b[12]:=y+2; c[12]:='12.bmp';  a[13]:=x+0; b[13]:=y+2; c[13]:='13.bmp';  a[14]:=x+1; b[14]:=y+2; c[14]:='14.bmp';  a[15]:=x+1; b[15]:=y+1; c[15]:='15.bmp';  a[16]:=x+2; b[16]:=y+1; c[16]:='16.bmp';  timer1.Enabled:=true;timer1.Interval:=10;form1.Image1.Canvas.Draw(x,y,buf); n:=1; n:=n+1;  if n=16 then begin n:=1; end;   end;  end; procedure TForm1.Timer1Timer(Sender: TObject);begin   form1.Canvas.Draw(x,y,buf); x:=a[n]; y:=b[n];if x>form1.Width then x:=-w;backrct:=bounds(a[n], b[n], w, h);    buf.Canvas.CopyRect(BufRct, back.Canvas, backrct);form1.Image1.Canvas.Draw(x,y,bitmap); end;   end.
|  |   Вопрос задал: Ровный Ю А (статус: Посетитель)Вопрос отправлен: 13 февраля 2009, 12:45
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 13 февраля 2009, 15:08; участников в обсуждении: 2. 
|   | Вадим К (статус: Академик), 13 февраля 2009, 13:47 [#1]:Долго читал, но так и не понял, что же не так работает. Да, кода много, но непонятно немного, что он делает в результате. Вопрос, что хотелось, как бы есть, но он как то задан всколзь.
 timer1.Interval:=10; - безсмысленная конструкция. Всё равно значения меньше 52 не работают так как ожидается. Ну не будет ось дергать так быстро таймер.
 
 И сложилось впечетление, что о циклах и о том, что такое локальные/глобальные переменные ни гу-гу.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Ровный Ю А (статус: Посетитель), 13 февраля 2009, 14:31 [#2]:Просто когда я задаю каждую функцию на отдельную кнопку   включаю таймер1 и указываю конкретную функцию x=  y= и название  изображения  все работает как мне надо. Потом при нажатии другой кнопки приходиться выключать timer1 и включать таймер2 и менять паметры.   Но это же обсурд управление 1 элементом  16ю кнопками.  Циклами не получилось, решил массивами но опять же он не подставляет /x:=x+1/ а решает её и добавляет 1 вместо функции , а для движения необходимо написать x:=x+1. И поэтому движения нет вместо него перемещение по осям по точкам при нажатии клавиши. причем изображение не меняется а выдает ошибку что что-то с типами данных. Вобщем эта программа отображает летящий самолет при нажатии кнопки вверх меняется угол направления полета например с горизонтального  на  диагональ и меняется изображение.
 Я начинающий так что прошу помощи.
 |  
|   | Вадим К (статус: Академик), 13 февраля 2009, 14:50 [#3]:а чем отличается движения от перемещения? То что вы начинающий, не избавляет от необходимости ясно излагать мысли.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Ровный Ю А (статус: Посетитель), 13 февраля 2009, 15:08 [#4]:Нет движения вперед по функции объект стоит на месте, а при нажатии клавиши он перемещается на другую позицию и остаётся стоять на месте |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |