|
#1
|
||||
|
||||
В чём ошибка?
При запуске выскакивает acces violation at adress .... at module
Вот код: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Mas:array[0..19,0..19,0..1] of Integer; zemlya:array[0..4] of TBitmap; obekti:array[1..4] of TBitmap; i,j,k : Integer; Buf : TBitmap; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Randomize; for i:=0 to 19 do for j:=0 to 19 do for k:=0 to 1 do Mas[i,j,k]:=random(5); for i:=0 to 4 do begin zemlya[i]:=TBitmap.Create; zemlya[i].LoadFromFile('E:\MMM\image\zemlya\'+inttostr(i)+'.bmp'); end; for i:=1 to 4 do begin obekti[i]:=TBitmap.Create; obekti[i].Transparent:=true; obekti[i].LoadFromFile('E:\MMM\image\obekti\'+inttostr(i)+'.bmp'); end; for i:=0 to 4 do begin zemlya[i]:=TBitmap.Create; zemlya[i].Width:=32; zemlya[i].Height:=32; zemlya[i].LoadFromFile('E:\MMM\image\zemlya\'+inttostr(i)+'.bmp'); end; for i:=1 to 4 do begin obekti[i]:=TBitmap.Create; obekti[i].Transparent:=true; obekti[i].Width:=32; obekti[i].Height:=32; obekti[i].LoadFromFile('E:\MMM\image\obekti\'+inttostr(i)+'.bmp'); end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin for i:=0 to 19 do for j:=0 to 19 do Buf.Canvas.Draw(i*32,j*32, zemlya[ Mas[I,j,0] ] ); for i:=0 to 19 do for j:=0 to 19 do Buf.Canvas.Draw(i*32,j*32, obekti[ Mas[I,j,1] ] ); Form1.Canvas.Draw(0,0,Buf); end; end. |
#2
|
||||
|
||||
У вас значение Mas генерится в диапазоне от 0 до 4, а границы массива obekti в диапазоне от 1 до 4. Вот и получается обращение к несуществующему элементу массива.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
Mas[i,j,k]:=random(5); здесь
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#4
|
||||
|
||||
исправил все 1 на 0.но та же ошибка!помогите пожалусто
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Buttons; type TForm1 = class(TForm) Timer1: TTimer; SpeedButton1: TSpeedButton; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Mas:array[0..19,0..19,0..1] of Integer; zemlya:array[0..4] of TBitmap; obekti:array[0..4] of TBitmap; i,j,k : Integer; Buf : TBitmap; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin for i:=0 to 19 do for j:=0 to 19 do Buf.Canvas.Draw(i*32,j*32, zemlya[ Mas[I,j,0] ] ); for i:=0 to 19 do for j:=0 to 19 do Buf.Canvas.Draw(i*32,j*32, obekti[ Mas[I,j,1] ] ); Form1.Canvas.Draw(0,0,Buf); end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin Randomize; for i:=0 to 19 do for j:=0 to 19 do for k:=0 to 1 do Mas[i,j,k]:=random(5); for i:=0 to 4 do begin zemlya[i]:=TBitmap.Create; zemlya[i].LoadFromFile('E:\MMM\image\zemlya\'+inttostr(i)+'.bmp'); end; for i:=0 to 4 do begin obekti[i]:=TBitmap.Create; obekti[i].Transparent:=true; obekti[i].LoadFromFile('E:\MMM\image\obekti\'+inttostr(i)+'.bmp'); end; for i:=0 to 4 do begin zemlya[i]:=TBitmap.Create; zemlya[i].Width:=32; zemlya[i].Height:=32; zemlya[i].LoadFromFile('E:\MMM\image\zemlya\'+inttostr(i)+'.bmp'); end; for i:=0 to 4 do begin obekti[i]:=TBitmap.Create; obekti[i].Transparent:=true; obekti[i].Width:=32; obekti[i].Height:=32; obekti[i].LoadFromFile('E:\MMM\image\obekti\'+inttostr(i)+'.bmp'); end; end; end. |
#5
|
||||
|
||||
всмысле?можно поподробнее?
|
#6
|
||||
|
||||
А таймер вы когда запускаете? Прямо при старте программы?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
||||
|
||||
Вы два раза массив obekti создаёте, уберите повторное TBitmap.Create
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#8
|
||||
|
||||
исправил таймер(запуск по нажатию на клавишу) и убрал повторные заполнения,но та же ошибка
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Buttons; type TForm1 = class(TForm) Timer1: TTimer; SpeedButton1: TSpeedButton; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Mas:array[0..19,0..19,0..1] of Integer; zemlya:array[0..4] of TBitmap; obekti:array[0..4] of TBitmap; i,j,k : Integer; Buf : TBitmap; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin for i:=0 to 19 do for j:=0 to 19 do Buf.Canvas.Draw(i*32,j*32, zemlya[ Mas[I,j,0] ] ); for i:=0 to 19 do for j:=0 to 19 do Buf.Canvas.Draw(i*32,j*32, obekti[ Mas[I,j,1] ] ); Form1.Canvas.Draw(0,0,Buf); end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin Timer1.Enabled:=True; Randomize; for i:=0 to 19 do for j:=0 to 19 do for k:=0 to 1 do Mas[i,j,k]:=random(5); for i:=0 to 4 do begin zemlya[i]:=TBitmap.Create; zemlya[i].Width:=32; zemlya[i].Height:=32; zemlya[i].LoadFromFile('E:\MMM\image\zemlya\'+inttostr(i)+'.bmp'); end; for i:=0 to 4 do begin obekti[i]:=TBitmap.Create; obekti[i].Width:=32; obekti[i].Height:=32; obekti[i].Transparent:=true; obekti[i].LoadFromFile('E:\MMM\image\obekti\'+inttostr(i)+'.bmp'); end; end; end. |
#9
|
||||
|
||||
Заполнение вероятно должно быть таким
Код:
... for i := 0 to 4 do begin zemlya[i]:=TBitmap.Create; zemlya[i].Width:=32; zemlya[i].Height:=32; zemlya[i].LoadFromFile('E:\MMM\image\zemlya\'+inttostr(i)+'.bmp'); obekti[i]:=TBitmap.Create; obekti[i].Transparent:=true; obekti[i].Width:=32; obekti[i].Height:=32; obekti[i].LoadFromFile('E:\MMM\image\obekti\'+inttostr(i)+'.bmp'); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
hsMapk (05.05.2014)
|
#10
|
||||
|
||||
сделал,но всё равно ошибка
|
#11
|
||||
|
||||
всё равно ошибка.чтож такое
|
#12
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#13
|
||||
|
||||
да.насчёт адреса
|
#14
|
||||
|
||||
Сейчас попробую проверить весь юнит целиком, нужно немного времени для сборки
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
hsMapk (05.05.2014)
|
#15
|
||||
|
||||
буду ждать
|