Вверх ↑
Этот топик читают: Гость
Ответов: 2058
Рейтинг: 28
#1: 2008-01-29 01:19:39 ЛС | профиль | цитата
У меня почему то вот эта схема (dgle.rar) выдаёт ошибку. Не знаете почему.

------------ Дoбавленo:

b167, WinXP SP2, Дельфи 4.
карма: 1

-1
файлы: 2dgle.rar [11.3KB] [491], dgle.png [8.1KB] [1054]
Голосовали:Астрамак
Ответов: 3655
Рейтинг: 69
#2: 2008-01-29 17:16:01 ЛС | профиль | цитата
Эдик,
Build start...
Generated code
Create project...
Command line: dcc32.exe "C:\Program Files\HiAsm165\Elements\delphi\code\Test_DEGL_Zag_Modeli1.dpr" "-U C:\Downloads\DGLE\." -Q
Borland Delphi Version 12.0 Copyright (c) 1983,98 Inprise Corporation

C:\Program Files\HiAsm165\Elements\delphi\code\hiInlineCode_FD14A0.pas(5) Fatal: File not found: 'GameTypes.dcu'
End build

карма: 0

0
Ответов: 2058
Рейтинг: 28
#3: 2008-02-01 11:59:05 ЛС | профиль | цитата
Вячеслав, всё есть в архиве dgle.rar. Надо скопировать GameTypes.pas в папку "Code"
------------ Дoбавленo:

Программеры объясните пожалуйста в каких случаях выходит эта ошибка?

При не правельнои расположениа данных в памяти что ли? И кто в этом виноват?
карма: 1

0
Ответов: 5446
Рейтинг: 323
#4: 2008-02-01 12:06:39 ЛС | профиль | цитата
Хы... Это самая распространённая и самая трудноуловимая ошибка. Означает она то, что программа захотела прочитать адрес, ей не принадлежащий. Например - создали объект, сохранили указаьтель на него, потом объект удалили, а потом - обратились к объекту по этому указателю. И получили "бум".
карма: 1

0
Ответов: 2125
Рейтинг: 159
#5: 2008-02-01 14:08:52 ЛС | профиль | цитата
Судя по тому, что адрес гораздо больше 0x00400000, ошибка произошла в какой-то DLL, которую некорректно использовали.
карма: 1

0
Ответов: 2058
Рейтинг: 28
#6: 2008-02-01 14:47:37 ЛС | профиль | цитата
tsdima, я как раз использую DLL. Выходит надо искать причину в DLL?

------------ Дoбавленo:


Вот код

#pas
unit HiAsmUnit;

interface

uses kol,Share,Debug, GameTypes, DGLEngine_header;

type
THiAsmClass = class(TDebug)
private

public
_data_Data:THI_Event;
Data1:THI_Event;
Data2:THI_Event;
Data3:THI_Event;

procedure doinit(var _Data:TData; Index:word);
procedure doPlayerX(var _Data:TData; Index:word);
end;


implementation

var Font, Space : cardinal;


procedure Init;
begin
DirectSoundInit;
ExploSound:=LoadSample('Data\expl.wav');
PlasmaSound:=LoadSample('Data\plasma.wav');

WriteValueToIniFile ('C:\Program Files\HiAsm\Разрабатываемые компоненты\DGLE\DGLEngine_Log.ini', 'Section', 'Key', '1') ;

Font:=LoadFontFromFile('Data\Font.dft');
AsteroidModel:=LoadModel('Data\Asteroid.dmd',MDL_NO_SCALE);// MDL_SCALE_EVERY_FRAME - указывает, что модель будет автомасштабироватья при загрузке
Space:=LoadTextureFromFile('Data\space.bmp');
SpaceShip:=LoadTextureFromFile('Data\Ship.bmp',TEXDETAIL_BEST,TRANSCOLOR_AQUA);
PlasmaTexture:=LoadTextureFromFile('Data\Plasma.bmp',PlasmaTexture);
AsteroidTexture:=LoadTextureFromFile('Data\Asteroid.jpg');
ExploTexture:=LoadTextureFromFile('Data\Explo.bmp');


CreateConsole(Font);
WriteValueToIniFile ('C:\Program Files\HiAsm\Разрабатываемые компоненты\DGLE\DGLEngine_Log.ini', 'Section', 'Key', '2') ;
RegisterCommandProcedure('quit',@QuitEngine);
WriteValueToIniFile ('C:\Program Files\HiAsm\Разрабатываемые компоненты\DGLE\DGLEngine_Log.ini', 'Section', 'Key', '3') ;
end;


procedure Draw;
begin
WriteValueToIniFile ('C:\Program Files\HiAsm\Разрабатываемые компоненты\DGLE\DGLEngine_Log.ini', 'Section', 'Key', '6') ;
Begin2D;
DrawTexture2D_Simple(Space,0,0,640,480);
DrawPlasma;
DrawPlayer;
End2D;
WriteValueToIniFile ('C:\Program Files\HiAsm\Разрабатываемые компоненты\DGLE\DGLEngine_Log.ini', 'Section', 'Key', '4') ;
DrawAsteroid;

Begin2D;
DrawExplo;

DrawText2D(Font,10,10,'FPS: '+Int2Str(GetFPS),$FFFFFF,200);
DrawConsole;
End2D;
end;


procedure Process;
begin
WriteValueToIniFile ('C:\Program Files\HiAsm\Разрабатываемые компоненты\DGLE\DGLEngine_Log.ini', 'Section', 'Key', '5') ;
if random(25) = 10 then CreateAsteroid(random(600),-64);
ProcessPlayer;
ProcessPlasma;
ProcessConsole;
ProcessAsteroid;
ProcessExplo;

if IsKeyPressed(Key_Escape) then QuitEngine;
end;

procedure InitMan;

begin
RegProcedure(PROC_DRAW,@Draw);
RegProcedure(PROC_PROCESS,@Process);
RegProcedure(PROC_INIT,@init);

SetGameProcessInterval(25);

SetEngineInitParametrs(640,480,32,0,False,FALSE,FALSE,TRUE);

ApplicationName('Пример');

WaitShot:=0;
PlayerX:=(640-64) div 2;

SetLength(Plasma,0);
SetLength(Asteroids,0);
SetLength(Explosions,0);

randomize;

//PlayMusic('Data\Music.mid',TRUE);

StartEngine;

end;


procedure THiAsmClass.doInit;
begin
if LoadDGLEngineDLL('DGLEngine.dll') then InitMan;


end;


procedure THiAsmClass.doPlayerX;
begin
// PlayerX := ToIntegerEvent(Data1);
// PlayerY := ToIntegerEvent(Data2);
// Ogon := ToIntegerEvent(Data3);
end;



end.

------------ Дoбавленo:


Данная процедура

#pas
WriteValueToIniFile ('C:\Program Files\HiAsm\Разрабатываемые компоненты\DGLE\DGLEngine_Log.ini', 'Section', 'Key', '3') ;
Записывет в ini файл числа от 1 до 6. И она останавливаеться на 3. Значит procedure Init; выполняеться полностью и потом происходит Бум.
------------ Дoбавленo:

Вот этот движок хочу подключить DGLE
Выше приведённый код работат если отключить загрузку 3D модели. Вот если эту строчку

#pas
AsteroidModel:=LoadModel('Data\Asteroid.dmd',MDL_NO_SCALE);// MDL_SCALE_EVERY_FRAME - указывает, что модель будет автомасштабироватья при загрузке
закоментировать, программа не вылетает.
карма: 1

1
Голосовали:Stasie
Ответов: 5446
Рейтинг: 323
#7: 2008-02-01 14:55:39 ЛС | профиль | цитата
Проверь, подцепляется ли процедура LoadModel
карма: 1

0
Ответов: 2125
Рейтинг: 159
#8: 2008-02-01 15:14:59 ЛС | профиль | цитата
Ошибка, видимо, происходит при отрисовке AsteroidModel. Если строчку закомментировать, то оно останется нулём, и твоя DGLE просто ничего не будет делать, когда ты попросишь нарисовать AsteroidModel.
Видимо, Asteroid.dmd не подходит (кривой, версия не та, или нехватает составных частей, я не знаю, с моделями никогда дела не имел).
Чтобы подтвердить эту версию, оставь LoadModel, но закомментируй DrawModel.
Кстати, астероиды у тебя вроде не сразу появляются, ошибка-то сразу появляется, или как только астероид сгенерируется?
карма: 1

0
Ответов: 2058
Рейтинг: 28
#9: 2008-02-01 15:50:58 ЛС | профиль | цитата
1.
tsdima писал(а):
Видимо, Asteroid.dmd не подходит (кривой, версия не та, или нехватает составных частей, я не знаю, с моделями никогда дела не имел).

я попробывал другую модель, результат не изменился. Данный пример прекрасно работает на чистом Дельфи6. Но вот когда я его перенашу в HiAsm, то происходит глюк при загрузке 3D модели.

2.
tsdima писал(а):
Чтобы подтвердить эту версию, оставь LoadModel, но закомментируй DrawModel.

попробывал ни чего не получилось. tsdima вот код отрисовки.

#pas
procedure Draw;
begin
WriteValueToIniFile ('C:\Program Files\HiAsm\Разрабатываемые компоненты\DGLE\DGLEngine_Log.ini', 'Section', 'Key', '6') ;
Begin2D;
DrawTexture2D_Simple(Space,0,0,640,480);
DrawPlasma;
DrawPlayer;
End2D;
WriteValueToIniFile ('C:\Program Files\HiAsm\Разрабатываемые компоненты\DGLE\DGLEngine_Log.ini', 'Section', 'Key', '4') ;
//DrawAsteroid;
Begin2D;
DrawExplo;
DrawText2D(Font,10,10,'FPS: '+Int2Str(GetFPS),$FFFFFF,200);
DrawConsole;
End2D;
end;
В начале кода стоит вот это

#pas
WriteValueToIniFile ('C:\Program Files\HiAsm\Разрабатываемые компоненты\DGLE\DGLEngine_Log.ini', 'Section', 'Key', '6') ;
если бы отрисовка началась, то у меня в файле 'C:\Program Files\HiAsm\Разрабатываемые компоненты\DGLE\DGLEngine_Log.ini', 'Section', 'Key', '6' было бы значени 6. Но там 3. По моему это означает, что выполняеться процедура procedure Init; полностью и всё бум. Другие даже не начинаються процедуры выполняться, или я не прав?

------------ Дoбавленo:


3.
tsdima писал(а):
Кстати, астероиды у тебя вроде не сразу появляются, ошибка-то сразу появляется, или как только астероид сгенерируется?

не чего на экране, не успивает вообще отрисоваться, он прозрачный.

------------ Дoбавленo:


Вот

карма: 1

0
файлы: 1dgle2.png [20.3KB] [924]
Ответов: 2125
Рейтинг: 159
#10: 2008-02-01 17:12:35 ЛС | профиль | цитата
Эдик писал(а):
пример прекрасно работает на чистом Дельфи6

А эта библиотека случайно не привязана к VCL?
карма: 1

0
Ответов: 2058
Рейтинг: 28
#11: 2008-02-01 17:22:48 ЛС | профиль | цитата
tsdima писал(а):
А эта библиотека случайно не привязана к VCL?

Данная библиотека создаёт собственное окно, где и происходит прорисовка.
Вот исходники этой библиотеки 220 Кбайт dgle_sources.rar
Как я понимаю она откомпилированна на чистом дельфи.
------------ Дoбавленo:

tsdima, а как определяеться, что DLL привязанна к VCL? Я попробую определить.
карма: 1

0
Ответов: 2125
Рейтинг: 159
#12: 2008-02-01 17:29:31 ЛС | профиль | цитата
Эдик писал(а):
прекрасно работает на чистом Дельфи6

А на чистом Delphi 4 ?
карма: 1

0
Ответов: 2058
Рейтинг: 28
#13: 2008-02-01 17:34:35 ЛС | профиль | цитата
tsdima, с этим проблема. У меня нет чистого Дельфи4. Я его искал, хотел купить, но не где не нашол.
карма: 1

0
Ответов: 3655
Рейтинг: 69
#14: 2008-02-01 17:35:06 ЛС | профиль | цитата
Эдик писал(а):
а как определяеться, что DLL привязанна к VCL? Я попробую определить.

можешь даже не парится весь делфи привязан к VCL.
карма: 0

0
Ответов: 2058
Рейтинг: 28
#15: 2008-02-01 17:37:34 ЛС | профиль | цитата
Вот что написано в справке.
DGLEngine расчитан на работу в среде Borland Delphi начиная с версии 5.0, работа с другими компиляторами не гарантируется.

карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)