Текущий архив: 2005.08.14;
Скачать: CL | DM;
Вниз
Проблемы с выстрелами, а вернее, с убийством себе подобных. Найти похожие ветки
← →
[EViL] (2005-04-22 19:09) [0]Народ, помогите с двиглом! Ничего не могу поделать!
Вот целый список проблем, с которыми я столкнулся:
1) Пуля летит рывками, а не плавно.
2) [Самое страшное :(] При убийстве врага происходит Access Violation.
Я не очень хорошо работаю с TList`ом, поэтому мне кажется, что все проблемы из за него.
Вот линк на исходник: http://pages.plotinka.ru/~ustalov_d/files/ZeroDivide_22apr2005.zip (1,4Мб)
Линк на RemObjects Pascal Script (на его основе сделан скриптинг): http://pages.plotinka.ru/~ustalov_d/files/RemObjects.zip
P.S: в архиве лежат низкокачественные текстуры в целях уменьшения размера.
P.P.S: используется последняя версия GLScene с CVS.
← →
Fosgen (2005-04-22 20:38) [1]Приветствую.
Ты бы лучше кусок кода, отвечающий за перемещение пули сюда бы запостил, а то думаешь всем интересно в твоем исходнике ковыряться?
То же самое - как у тебя уничтожается супостат? Наверное при Object.Free али Object.Destroy - и происходит твое Access Violation?
← →
Fosgen (2005-04-22 20:39) [2]Тем более что у тебя исходник в полтора метра - мне например просто тяжко через свой коннект тянуть...
← →
[EViL] (2005-04-22 20:59) [3]Вот код (КОРЯВЕЙШИЙ :)):
procedure TfrmMain.CadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
begin
{...}
TurnBullets;
end;
procedure TurnBullets;
var
_Index: integer;
begin
if not Assigned(BulletsList) then Exit;
DelList.Clear;
for _Index := 0 to BulletsList.Count - 1 do
if not TBullet(BulletsList[_Index]).DummyCube.Visible
then DelList.Add(IntToStr(_Index));
for _Index := 0 to DelList.Count - 1 do begin
TBullet(BulletsList[StrToInt(DelList[_Index])]).Free;
BulletsList.Delete(StrToInt(DelList[_Index]));
end;
DelList.Clear;
with frmMain do
for _Index := 0 to BulletsList.Count - 1 do
if Assigned(TBullet(BulletsList[_Index])) and Assigned(TBullet(BulletsList[_Index]).TargetObject) then
if TBullet(BulletsList[_Index]).DummyCube.Visible and TBullet(BulletsList[_Index]).TargetObject.DummyCube.Visible then begin
TBullet(BulletsList[_Index]).DummyCube.PointTo(TBullet(BulletsList[_Index]).TargetObject.VectorPosition, YHMgVector);
TBullet(BulletsList[_Index]).DummyCube.Move(Cadencer.CurrentTime * TBullet(BulletsList[_Index]).Speed);
TBullet(BulletsList[_Index]).CurrentDistance := TBullet(BulletsList[_Index]).CurrentDistance + Cadencer.CurrentTime * TBullet(BulletsList[_Index]).Speed;
if TBullet(BulletsList[_Index]).CurrentDistance >= TBullet(BulletsList[_Index]).MaxDistance
then TBullet(BulletsList[_Index]).DummyCube.Visible := false;
if Abs(VectorDistance(TBullet(BulletsList[_Index]).DummyCube.Position.AsVector, TBullet(BulletsList[_Index]).TargetObject.VectorPosition)) < Bullet_EndRadius then begin
TBullet(BulletsList[_Index]).TargetObject.Health := TBullet(BulletsList[_Index]).TargetObject.Health - TBullet(BulletsList[_Index]).Attack;
if TBullet(BulletsList[_Index]).TargetObject.Health <= 0 then begin
TBullet(BulletsList[_Index]).TargetObject.DummyCube.Visible := false;
DelList.Add(IntToStr(_Index));
PlaySound("die.wav");
end else PlaySound("damaged.wav");
TBullet(BulletsList[_Index]).DummyCube.Visible := false;
end;
end;
for _Index := 0 to DelList.Count - 1 do TBullet(BulletsList[_Index]).TargetObject.Free;
end;
Теперь - описание TBullet и TEnemy:
TGameChar = class // Основной класс игрового объекта
protected
FActorFileName: string;
procedure ActorFileNameChange(AValue: string);
function GetPosition: TVector4f;
public
DummyCube: TGLDummyCube;
Actor: TGLActor;
Name: string;
constructor Create(UniqueName: string; APosition: TVector4f; AActorFileName: string);
property VectorPosition: TVector4f read GetPosition;
procedure ChangeAnimation(AAnimationName: string);
function GetAnimation: string;
property ActorFileName: string read FActorFileName write ActorFileNameChange;
destructor Destroy; override;
end;
TWeaponedGameChar = class(TGameChar) // Класс вооруженного игрового объекта
private
FWeaponFileName: string;
procedure WeaponFileNameChange(AValue: string);
public
Weapon: TGLActor;
constructor Create(UniqueName: string; APosition: TVector4f; AActorFileName, AWeaponFileName: string);
property WeaponFileName: string read FWeaponFileName write WeaponFileNameChange;
destructor Destroy; override;
end;
TEnemy = class(TWeaponedGameChar) // Класс противника
public
Health: integer;
constructor Create(UniqueName: string; APosition: TVector4f; AActorFileName, AWeaponFileName: string; AHealth: integer);
destructor Destroy; override;
end;
TBullet = class // Класс пули
private
ParticleFX: TGLParticleFXRenderer;
FXManager: TGLPerlinPFXManager;
Sphere: TGLSphere;
public
DummyCube: TGLDummyCube;
Speed, CurrentDistance, MaxDistance: Single;
Attack: integer;
TargetObject: TEnemy;
constructor Create(AStartVector: TVector4f; AMaxDistance: Single; ATargetObject: TEnemy);
destructor Destroy; override;
end;
const Bullet_EndRadius = 0.3;
Щас наверно, выкину текстуры из исходника и сообщу вам, чем их заменить.
← →
[EViL] (2005-04-22 21:00) [4]Ах да!!!
DelList: TStringList;
BulletsList, ObjectsList: TList;
← →
[EViL] (2005-04-22 21:14) [5]Вот линк на ТОЛЬКО ИСХОДНИК: http://pages.plotinka.ru/~ustalov_d/files/ZeroDivide_22apr_2005_src_only.zip (40кб).
приложены файлы README, которые помогут вам восстановить удалённые текстуры и модели.
--
Заранее спасибо за помощь.
← →
Fosgen (2005-04-23 17:38) [6]Сразу - несколько советов:
1. Попробуй сделать перемещение не через готовую фнкцию Move, а через коррекцию координат - AbsoluteDirection*Speed*Deltatime.
2. Выключи отображение объектов типа TGLDummyCube - жрут ресурсов до дури - уже это может помочь.
Посмотрю исходник - мож еще чего скажу.
← →
[EViL] (2005-04-23 18:10) [7]1. Надо попробовать...
2. У всех TGLDummyCube`ов свойство VisibleAtRunTime установлено в FALSE.
← →
_sHaDe_ © (2005-04-24 12:25) [8]1) Пуля летит рывками, а не плавно.
У меня пуля двигалась рывками если я считал не в каденсере, а через таймер.
← →
[EViL] (2005-04-24 13:40) [9]_sHaDe_: всё идёт в каденсере.
Fosgen: что-то ты долго не отвечаешь... Запутался в моей ахинее? :) Отзовись plz.
Страницы: 1 вся ветка
Текущий архив: 2005.08.14;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.01 c