Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Нужен совет к 2D аркаде!   Найти похожие ветки 

 
ZAROLF ©   (2003-12-14 16:49) [0]

Вообщем дела такие, надо оружие подогнать под выстрел. Мало того в четырёх разных положениях:стоя влево,стоя вправо,сидя влево,сидя вправо.
И все это оказалось не так просто, обычный "angle" всеголишь разворачивал
спрайт, а спрайт этот анимированый.

И вот под каждое положение нужно чтото подобное:

if isButton1 in MainForm.DXInput.States then //здесь типа выстрел
   begin
     with TShoot2.Create(Engine) do
     begin
       PixelCheck := True;
       Image := MainForm.ImageList.Items.Find("Shoot2");
       X := Self.X+Self.Width  -40;
       Y := Self.Y+Self.Height -38;
       Width := Image.Width;
       Height := Image.Height;
   end;
 end;

constructor TShoot2.Create(AParent: TSprite);
begin
inherited Create(AParent);
 Image := MainForm.ImageList.Items.Find("Shoot2");
 Width := Image.Width;
 Height := Image.Height;
end;

Procedure TShoot2.DoMove(MoveCount: Integer);
Begin
inherited DoMove(MoveCount);
if y<= 0 then Dead;
if y>= 480 then Dead;
x:=x+5;
if m mod 1 = 0 then
if AnimCount<5 then inc(AnimCount) else AnimCount:=0;
AnimPos:= AnimCount;
end;


 
SoulSilver   (2003-12-14 21:43) [1]

Сформулируй вопрос конкретнее, я тоже пишу 2D Аркаду и постараюсь помочь. Как я понял у тебя есть картинка персонажа и надо сделать так, чтобы граммотно смотрелось оружие. Для поворота влево и вправо сделай две картинки, а для приседания смещай картинку оружия вниз по Y.


 
ZAROLF ©   (2003-12-15 07:27) [2]

> SoulSilver   (14.12.03 21:43) [1]
> Сформулируй вопрос конкретнее, я тоже пишу 2D Аркаду и постараюсь
> помочь. Как я понял у тебя есть картинка персонажа и надо
> сделать так, чтобы граммотно смотрелось оружие. Для поворота
> влево и вправо сделай две картинки, а для приседания смещай
> картинку оружия вниз по Y.
-----------------------------------------------------------------

Дык персонаж уже готов, реч идёт о том - что надо задать точку для вылета пули из ствола.
В одном положении (например стоя влево) это легко сделать, подогнал координаты x,у и стреляй сколько влезет. А тут надо под
каждое положение, и пуля чтоб вылетала из ствола а не из головы например.


 
Thor ©   (2003-12-15 13:34) [3]


> ZAROLF ©   (15.12.03 07:27) [2]

а какие проблемы привязать начальную координату пули к стволу плюс поправка?


 
Darthman ©   (2003-12-15 13:43) [4]

Поставить на каждый кард по пикселу ОСОБОГО цвета, не используемого в игре, или записать в файл другой для каждого кадра и к этой точке привязывать рождение пули.


 
ZAROLF ©   (2003-12-15 14:26) [5]

> Thor ©   (15.12.03 13:34) [3]
> а какие проблемы привязать начальную координату пули к стволу
> плюс поправка?
-----------------------------------------------------------------

Понимаешь мне нужно чтобы ствол разворачивался и опускался вместе с персонажем, во всех положениях. см.выше!


 
SoulSilver   (2003-12-15 14:47) [6]

У пули есть параметри Angle? Если есть, то я не вижу проблемы, а для красоты подгони немного точку вылета пули по Y под координату положения стровола по Y в горизонтальном положении, при вылете пули присваивай Angle пули - Angle оружия.


 
Niklto   (2003-12-15 14:49) [7]

A her ego znaet


 
ZAROLF ©   (2003-12-15 14:58) [8]

> SoulSilver   (15.12.03 14:47) [6]
> У пули есть параметри Angle? Если есть, то я не вижу проблемы,
> а для красоты подгони немного точку вылета пули по Y под
> координату положения стровола по Y в горизонтальном положении,
> при вылете пули присваивай Angle пули - Angle оружия.
-----------------------------------------------------------------

А пример бы написал, а то я уже это пробовал делать - неполучается.


 
SoulSilver   (2003-12-16 15:27) [9]

Вот пример, для начала создаем класс пули, хотя я думаю что ты это всё знаешь, но всё-равно:

//Класс пули Игрока
TBullet = class(TImageSpriteEx)//Для того, чтобы был параметр Angle
protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MoveCount: Integer); override;
procedure DoDraw; override;
end;


Далее в процедуре DoMove оружия пишем, в тот момент, когда нажимаем клавишу(стреляем), создается пуля:

AngleCorrective:=random(3); //Это для того, чтобы у пуль был разлет(небольшой), опиши в var"е
Bullet := TBullet.Create(MainForm.DXSpriteEngine.Engine);
with TBullet(Bullet) do
begin
Image := MainForm.ImageList.Items.Find("bullet");
Width := 2;
Height := 2;
if PDirect = -1 then X := Player.X+(Player.Width/2-3); //Это я сделал для того, чтобы, если игрок стоит и смотрит влево(PDirect = -1, то пуля создается возле дула оружия(у меня это координата по X описана выше)
if PDirect = 1 then X := Player.X+(Player.Width/2+3);//Тоже самое, но если стоит и повернут вправо
Y := Player.Y+(Player.Height/2+2); //Здесь поправка по Y, для красоты
Z := 5;
//Далее, конечно можно было "case" использовать, ну да ладно, это собственно небольшой разлет пули, ну понял, поправка угла полета пули  
if P1GunAngleCorrective = 0 then Angle:=Weapon.Angle;
if P1GunAngleCorrective = 1 then Angle:=Weapon.Angle+1;
if P1GunAngleCorrective = 2 then Angle:=Weapon.Angle-1;
PixelCheck := false;
Collisioned := true;
end;


Далее процедуры пули:

procedure TBullet.DoDraw; //Тут идет отображение пули и поворот картинки соответственно углу её полета
begin
Image.Drawrotate(MainForm.DXDraw.Surface,round(WorldX),round(WorldY),image.width,image.height,round(animpos),0.5,0.5,Ang le);
end;

procedure TBullet.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if X < 0 then Dead;
if X > 800 then Dead;
if Y < 0 then Dead;
if Y > 600 then Dead;
X := X + sin256(Angle) * (bulletSpeed/1000)*MoveCount; //BulletSpeed - это компонента, влияющая на скорость пули, присвой ей чего-нибудь
Y := Y - cos256(Angle) * (bulletSpeed/1000)*MoveCount;
Collision;
end;

procedure TBullet.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is TMap then Dead; //При столкновении пули с картой - убиваем её
end;


Всё вроде, это код из моей игры, тоже 2D Аркады. Когда напишешь, выложи тут игру, посмотрим.


 
ZAROLF ©   (2003-12-16 18:13) [10]

>SoulSilver   (16.12.03 15:27) [9]
>Всё вроде, это код из моей игры, тоже 2D Аркады. Когда >напишешь, выложи тут игру, посмотрим.
-----------------------------------------------------------------
Тут одна загвоздка, персонаж может только идти и стрелять одновременно. По отдельности нехочет ни двигаться ни стрелять.

Да, скинуть демку я могу тебе на только на mail.


 
Thor ©   (2003-12-16 19:59) [11]


> ZAROLF ©   (16.12.03 18:13) [10]

на gamedev.ru был цикл статей про игру на delphiX и я делал стрелялку. вроде все нормально вылетало. (оружие поворачивалось)


 
SoulSilver   (2003-12-17 12:05) [12]

> ZAROLF ©
Я немного не понимаю, можешь прислать демку и посмотрим.


 
ZAROLF ©   (2003-12-17 13:32) [13]

SoulSilver   (17.12.03 12:05) [12]
> Я немного не понимаю, можешь прислать демку и посмотрим.
-----------------------------------------------------------------
Демку тебе выслал проверь ящик.


 
SoulSilver ©   (2003-12-17 13:41) [14]

2 ZAROLF ©
!   C:\Games\Archive\ChaosindaHouse\Demo.zip: Either multipart or corrupt ZIP archive
!   Cannot execute "C:\WINDOWS\TEMP\Rar$EX01.743\Demo.exe"

Сори, но не распаковывается архив, пришли, если можешь рар или экзешник.


 
ZAROLF ©   (2003-12-17 14:02) [15]

SoulSilver ©   (17.12.03 13:41) [14]
>Сори, но не распаковывается архив, пришли, если можешь рар или >экзешник.
-----------------------------------------------------------------
Отправляю в SFX. 337 килов.


 
SoulSilver ©   (2003-12-17 17:51) [16]

2 ZAROLF ©  
Посмотрел,  да увидел наконец, что не так у тебя. Скажи, а для чего у тебя

Procedure TShoot2.DoMove(MoveCount: Integer);
Begin
inherited DoMove(MoveCount);
if y<= 0 then Dead;
if y>= 480 then Dead;
x:=x+5;
if m mod 1 = 0 then //Вот от сюда
if AnimCount<5 then inc(AnimCount) else AnimCount:=0;
AnimPos:= AnimCount;
//До сюда
end;

Пули то у тебя не анимированные или я чего-то не догоняю...


 
ZAROLF ©   (2003-12-17 18:03) [17]

SoulSilver ©
>Пули то у тебя не анимированные или я чего-то не догоняю...
-----------------------------------------------------------------
Дык это выстрел ракеты - которую выпускает враг,это я просто пример выставлял.

Дык всётаки в чём проблема с оружием у плеера.


 
SoulSilver ©   (2003-12-17 18:20) [18]

Если честно, то я немного не врубаюсб почему так происходит, но могу дать пример своего кода, который работает нормально.
P.S. Приведи код, именно в том месте, где создается патрон у игрока


 
ZAROLF ©   (2003-12-17 18:36) [19]

SoulSilver ©   (17.12.03 18:20) [18]
> Если честно, то я немного не врубаюсб почему так происходит,
> но могу дать пример своего кода, который работает нормально.
> P.S. Приведи код, именно в том месте, где создается патрон
> у игрока
-----------------------------------------------------------------
А я твой код использовал в демке(всё как есть),а мой ничем особенным не блещет - стреляет в одном направлении или x- или x+.

P.S. Лучше приведи пример как бы ты сделал в данном случае (в моей игре),чтобы стрелять во все стороны "x"-+, и сидя желательно тоже.


 
SoulSilver ©   (2003-12-18 15:13) [20]

type

TPlayer = class(TImageSprite)
protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MoveCount: Integer); override;
end;

TWeapon = class(TImageSpriteEx)
protected
procedure DoMove(MoveCount: Integer); override;
procedure DoDraw; override;
end;

TWeapon04_Rocket = class(TImageSpriteEx)
protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MoveCount: Integer); override;
procedure DoDraw; override;
end;

var

Player: TSprite; //Игрок
Weapon: TWeapon; //Оружие
Weapon04_Rocket: array[0..999] of TWeapon04_Rocket; //Массив рокет
P1Direct: integer; //Направление героя (влево/вправо)
P1Reload: integer; //Значение текущей перезарядки
P1MaxReload: integer; //Значение перезарядки, чтобы патрон выстрелил
P1Clip: integer; //Обойма


Пошли процедуры

//Отображение оружия Игрока
procedure TWeapon.DoDraw;
Begin
Image.Drawrotate(MainForm.DXDraw.Surface,round(Player.WorldX)+16,round(Player.WorldY)+16,image.width,image.height,round( animpos),0.5,0.5,Angle);
end;

//Движение и стрельба оружия Игрока1
procedure TWeapon.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if isButton3 in MainForm.DXInput.States then
begin

if P1Direct = -1 then begin //Если игрок повернут влево, то
if P1Reload > P1MaxReload then begin //Если оружие перезарядилось, то
MainForm.DXWaveList.Items.Find("weapon04_rocketlauncher").Play(false); //Проигрываем звук выстрела
Weapon04_Rocket[n] := TWeapon04_Rocket.Create(MainForm.DXSpriteEngine.Engine); //Создаем рокету
with TWeapon04_Rocket(Weapon04_Rocket[n]) do
begin
Image := MainForm.ImageList.Items.Find("weapon04_rocket");
Width := 8;
Height := 8;
if P1Direct = -1 then X := Player.X+(Player.Width/2-5);
if P1Direct = 1 then X := Player.X+(Player.Width/2+5);
Y := Player.Y+(Player.Height/2+3);
Z := 5;
Angle := Weapon.Angle;
AnimSpeed := 100/3000;
Animlooped := true;
AnimStart := 0;
AnimCount := 17;
PixelCheck := false;
Collisioned := true;
end;
P1Reload := 0; //Присваеваем "переменной перезарядки" значению 0
dec(P1Clip); //Уменьшаем на один патрон в обойме
end;
end;
end;
end;

//Отображение рокеты Игрока1
procedure TWeapon04_Rocket.DoDraw;
Begin
Image.Drawrotate(MainForm.DXDraw.Surface,round(WorldX),round(WorldY),image.width,image.height,round(animpos),0.5,0.5,Ang le);
end;

//Движение рокеты Игрока1
procedure TWeapon04_Rocket.DoMove(MoveCount: Integer);
var
i: integer;
begin
inherited DoMove(MoveCount);
if X < 0 then Dead;
if X > 800 then Dead;
if Y < 0 then Dead;
if Y > 600 then Dead;

X := X + sin256(Angle) * (Weapon04_rocketStartSpeed/1000)*MoveCount;
Y := Y - cos256(Angle) * (Weapon04_rocketStartSpeed/1000)*MoveCount;
Collision;
end;

//Столкновение рокеты Игрока1
procedure TWeapon04_Rocket.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is TMap then Dead;
end;


Вот так бы я сделал, надеюсь разберешься. Я знаю, как сложно разбираться в чужом коде, но попробуй.


 
ZAROLF ©   (2003-12-18 16:18) [21]

Я уже решил эту проблему своим способом:

TShoot1Left = class(TImageSprite)
  protected
   procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
   procedure DoMove(MoveCount: Integer); override;
  public
   constructor Create(AParent: TSprite); override;
   destructor Destroy; override;
 end;

 TShoot1Right = class(TImageSprite)
  protected
   procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
   procedure DoMove(MoveCount: Integer); override;
  public
   constructor Create(AParent: TSprite); override;
   destructor Destroy; override;
 end;

//здесь выстрел
if (isButton1 in MainForm.DXInput.States) and (CanShoot(0)) then
begin
with TShoot1Left.Create(Engine) do
begin
PixelCheck := True;
Image := MainForm.ImageList.Items.Find("Shoot1");
Y := Player.Y+(Player.Height/4+2);
Width := Image.Width;
Height := Image.Height;
if Direct = -1 then
X := Player.X+(Player.Width/2-30)
else
if Direct = 1 then
begin
with TShoot1Right.Create(Engine) do
begin
PixelCheck := True;
Image := MainForm.ImageList.Items.Find("Shoot1");
X := Player.X+(Player.Width/2+24);
Y := Player.Y+(Player.Height/4+2);
Width := Image.Width;
Height := Image.Height;
//collision;
end;
end;
end;
end;
end;

Вот что я не пойму в твоём коде это:

if P1Direct = -1 then X := Player.X+(Player.Width/2-5);
if P1Direct = 1 then X := Player.X+(Player.Width/2+5);

как они у тебя подразделяются без "else" ?
-----------------------------------------------------------------
2.
Далее, мне нужен алтернативный способ стрелять сидя, как можно
проще сделать. Я вот пробовал через "Can":

function TPlayer.CanShoot(t:shortint): boolean;
begin
result:=true;
case t of
0: if ((isButton1 in MainForm.DXInput.States)and(isDown in MainForm.DXInput.States))then
begin
with TShoot1Left.Create(Engine) do
begin
PixelCheck := True;
Image := MainForm.ImageList.Items.Find("Shoot1");
Y := Player.Y+(Player.Height/2.4+2);
Width := Image.Width;
Height := Image.Height;
if Direct = -1 then
X := Player.X+(Player.Width/2-30)
else
if Direct = 1 then
begin
with TShoot1Right.Create(Engine) do
begin
PixelCheck := True;
Image := MainForm.ImageList.Items.Find("Shoot1");
X := Player.X+(Player.Width/2+24);
Y := Player.Y+(Player.Height/2.4+2);
Width := Image.Width;
Height := Image.Height;
end;
end;
end;
end;
end;
end;

... и знаеш чё получается, пули летят в два слоя.
Может сообразим как сделать более правильно.


 
SoulSilver ©   (2003-12-19 12:19) [22]

2 ZAROLF ©:
if P1Direct = -1 then X := Player.X+(Player.Width/2-5);
if P1Direct = 1 then X := Player.X+(Player.Width/2+5);

Проще говоря когда игрок нажимает клавишу влево, то P1Direct= - 1, а когда нажимает клавишу вправо, то P1Direct = 1, а затем когда игрок нажимает клавишу стрельбы, то пуля по идее должа вылетать из дула, так вот +5 и -5 в коде - это просто координаты дула, для красоты короче, а else я вообще тут не использую и не понимаю зачем он нужен в данном случае.
На счет стрельбы из положения сидя я скажу, что есть элементарный способ: когда игрок нажимает клавишу вниз, то картинка персонажа меняется на "положение сидя", оружие смешается вниз по Y, но так как у тебя нет класса оружия и патроны создаются из самого героя, то просто необходимо создавать пули со смещением по Y. Я считаю, что ты намудрил с функцией и двумя классами, но если оно работает, то ничего плохого в этом нет. А летят в два слоя это как? (прости мое невежество) :-)


 
ZAROLF ©   (2003-12-19 13:17) [23]

SoulSilver ©   (19.12.03 12:19) [22]
А летят в два слоя это как? (прости мое невежество) :-)
-----------------------------------------------------------------
Да нужно когда садишся(смещать по Y вниз) как то заглушить координаты из положения стоя. А то пули летят поверху и по низу.


 
SoulSilver ©   (2003-12-19 13:41) [24]

2 ZAROLF ©  

if (клавиша стрелять) then begin
if (перезарядка > какого-то числа) then begin
Создаем пулю begin
X := Player.X+(Player.Width/2);
Y := Player.Y+(Player.Height/2);
end;
end;
end;

if (клавиша стрелять) and (клавиша сидеть) then begin
if (перезарядка > какого-то числа) then begin
Создаем пулю begin
X := Player.X+(Player.Width/2);
Y := Player.Y+(Player.Height/2+чего-то);
end;
end;
end;

P.S. У меня это работает...


 
ZAROLF ©   (2003-12-19 14:53) [25]

>SoulSilver ©   (19.12.03 13:41) [24]
>P.S. У меня это работает...
-----------------------------------------------------------------
Благодарю за совет - действительно работает, игруха скоро будет готова. Сейчас работаю над AI - довольно недурной, хочу заставить
самонаводящуюся ракету обходить препятствия.


 
SoulSilver ©   (2003-12-20 16:39) [26]

2 ZAROLF ©:Надо будет взглянут на твою игру, может это конкурент NFK. Удачи с рокетой, я парился над паучком, который бы пытался подойти к игроку и взорваться, но у меня нифига не вышло :-(


 
ZAROLF ©   (2003-12-20 17:37) [27]

SoulSilver ©   (20.12.03 16:39) [26]
>я парился над паучком, который бы пытался подойти к игроку и >взорваться, но у меня нифига не вышло :-(
-----------------------------------------------------------------
Подробнее можешь описать обстановку с пауком, возможно помогу.

-----------------------------------------------------------------
2.
Вот дошёл до реализации звука и музыки (в своей игре),и тогда я понял - ну геморой этот Delphix. При каком то звуке выстрела мой
CPU:Cel400,128mb,TNT16Mb,SB16/64AWE превращается в нечто тооооооооормоооооооозящее. Ой-ё да о музыке можно забыть.

Может посоветуешь мне другой обработчик звука.


 
SoulSilver ©   (2003-12-21 09:52) [28]

2 ZAROLF ©
Я использую стандартный MediaPlayer, в принципе он хорош, но если хочешь наворотов, то используй Bass. MediaPlayer не тормозит игру, может загружать и (*.mp3) и (*.mid), а на паучка я уже забил, вместо него 10 видов оружия, 11 супер способностей :-))


 
ZAROLF ©   (2003-12-21 10:50) [29]

А у тебя аркада имеет какое напавление, бродилка или чемпионат по
мордобою(типа Worms).


 
SoulSilver ©   (2003-12-21 13:44) [30]

Она что-то вроде Soldat, если играл, а так - Мочилово.


 
ZAROLF ©   (2003-12-21 14:21) [31]

SoulSilver ©   (21.12.03 09:52) [28]
Я использую стандартный MediaPlayer, в принципе он хорош, но если хочешь наворотов, то используй Bass. MediaPlayer не тормозит игру, может загружать и (*.mp3) и (*.mid), а на паучка я уже забил, вместо него 10 видов оружия, 11 супер способностей :-))
-----------------------------------------------------------------
Чтото у меня стандартный MediaPlayer проигрывает только (*.mid),
а (*.wav) упорно отказывается.

Да, а где взять Bass. MediaPlayer.


 
SoulSilver ©   (2003-12-21 16:13) [32]

В Delphi есть MediaPlayer, он всё проигрывает, у меня играет mp3 - это 100%. Bass введи в Yandex и найдешь, это очень известная библиотека.


 
ZAROLF ©   (2003-12-22 13:55) [33]

Предположим у меня в игре есть рубильник и источник энергии.
И вот касаясь плеером этого рубильника(if Sprite is TPlayer then) надо убрать(dead;) источник энергии(тоже спрайт).
Как проще это сделать через "docollision".


 
SoulSilver ©   (2003-12-22 14:08) [34]

В Collision Player"а:
if Sprite is TРубильник then
Источник энергии.Dead;


 
dRake ©   (2003-12-22 14:10) [35]

По поводу BASS, для дельфей существует отличный набор пасников
http://un4seen.com , возможности либы используют на все 100!
Тут тебе и 3Д звук, и поддержка основный форматов, и создание отдельных потоков, и многое, многое другое ;) лично у меня
вся звуковая система на BASS, и тебе тоже рекомендую


 
ZAROLF ©   (2003-12-22 15:56) [36]

>SoulSilver ©   (22.12.03 14:08) [34]
>В Collision Player"а:
>if Sprite is TРубильник then
>Источник энергии.Dead;
-----------------------------------------------------------------
Вообщем у меня так, но всё равно вылетает при компиляции.

Procedure TRubilnik1Left.DoMove(MoveCount: Integer);
begin
PixelCheck := True;
Image := MainForm.ImageList.Items.Find("rubilnik1_left");
Width := Image.Width;
Height := Image.Height;
Collision;
end;

destructor TRubilnik1Left.Destroy;
begin
 inherited Destroy;
end;

procedure TRubilnik1Left.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is TPlayer then
begin
if AnimCount<0 then inc(AnimCount) else AnimCount:=1;
AnimPos:= AnimCount;
TEnergy1(Sprite).dead; //хотя без этого всё идёт, рубильник опускается.
end;
end;

Что ни так?


 
SoulSilver ©   (2003-12-22 16:04) [37]

У тебя класс TEnergy, в var"e опиши Energy: TEnergy; и в procedure TRubilnik1Left.DoCollision(Sprite: TSprite; var Done: Boolean); пиши уже Energy.Dead;


 
ZAROLF ©   (2003-12-23 15:48) [38]

Бета1:Тестинг
Чтото у меня в некоторых местах пули сквозь стены пролетают, незнаешь как стены сделать более плотными.

//Вот пимер обычных блоков
if Map[j,i]=5 then Image:=ImageList.Items.Find("Block1");
Collisioned := true;
x:=j*32+16;
y:= i*32+16;


 
SoulSilver ©   (2003-12-24 14:19) [39]

Снизить скорости пуль и задать размер всем картинкам, типа
Image := MainForm.ImageList.Items.Find("bullet");
Width := 4;
Height := 4;


У меня такой проблемы не было, но я думаю, что таким образом её решить можно


 
ZAROLF ©   (2003-12-24 15:08) [40]

SoulSilver ©   (24.12.03 14:19) [39]
>Снизить скорости пуль и задать размер всем картинкам, типа
>Image := MainForm.ImageList.Items.Find("bullet");
>Width := 4;
>Height := 4;
-----------------------------------------------------------------
И ещё один баг, плеер проходит сквозь стены в таких местах где нельзя упереться стволом(краем спрайта) в стены.
Вот взгляни в демке, когда спускаешся по ступенькам и заверни влево.

А здесь плотность плеера:

//влево Direct:= -1
if (Map[trunc((Player.X+30)/32)-1,trunc((Player.Y+30)/32)]<5)then
//вправо Direct:= 1
if (Map[trunc((Player.X)/32)+1,trunc((Player.Y+30)/32)]<5)then



Страницы: 1 2 вся ветка

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.07 c
8-1077790872
Builder
2004-02-26 13:21
2004.05.16
TImage


3-1082054430
td
2004-04-15 22:40
2004.05.16
onFilterRecord


9-1073153840
New user
2004-01-03 21:17
2004.05.16
Импорт моделей из Poser


4-1079960071
Dr.Karter
2004-03-22 15:54
2004.05.16
Результат от процесса


1-1083133018
Stas
2004-04-28 10:16
2004.05.16
тип PCHAR и ACCESS