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

Вниз

в примерах делфиХ нашел пример, но там безконечная карта!! как...   Найти похожие ветки 

 
SoS   (2003-12-23 21:58) [0]

как менять ее размер, мне надо 100 на 100 например а там она или безконечная или очень большая:
unit Main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, ExtCtrls, Menus, DXClass, DXSprite, DXInput, DXDraws,
 DXSounds, MMSystem, Wave;

type
 TMainForm = class(TDXForm)
   DXTimer: TDXTimer;
   DXDraw: TDXDraw;
   DXSpriteEngine: TDXSpriteEngine;
   DXInput: TDXInput;
   ImageList: TDXImageList;
   DXWaveList: TDXWaveList;
   DXSound: TDXSound;
   procedure DXDrawFinalize(Sender: TObject);
   procedure DXDrawInitialize(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
   procedure DXTimerActivate(Sender: TObject);
   procedure DXTimerDeactivate(Sender: TObject);
  end;
var
 MainForm: TMainForm;

implementation

{$R *.DFM}
type
 //класс обьекта
 TMonoSprite = class(TImageSprite)
 private
 procedure Hit;
 public
 procedure DoMove(MoveCount: Integer); override;
 end;
 //класс персонажа
 TPlayerSprite = class(TImageSprite)
 protected
 procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
 procedure DoMove(MoveCount: Integer); override;
 end;

procedure TMonoSprite.DoMove(MoveCount: Integer);
begin
PixelCheck := True;
end;

procedure TMonoSprite.Hit;
begin
Collisioned := False;

Image := MainForm.ImageList.Items.Find("img1-2");
MainForm.DXWaveList.Items.Find("snd").Play(False);
MainForm.DXInput.Joystick.Effects.Find("eff1").Start;
end;

procedure TPlayerSprite.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is TMonoSprite then
TMonoSprite(Sprite).Hit;
Done := False;
end;

procedure TPlayerSprite.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if (MainForm.DXInput.Joystick.X<>0) or (MainForm.DXInput.Joystick.Y<>0) then
begin

end else
begin
if isUp in MainForm.DXInput.States then
 Y := Y - 3;

   if isDown in MainForm.DXInput.States then
     Y := Y +3;

   if isLeft in MainForm.DXInput.States then
     X := X -3;

   if isRight in MainForm.DXInput.States then
     X := X +3;
 end;

 Collision;

 Engine.X := -X+Engine.Width div 2-Width div 2;
 Engine.Y := -Y+Engine.Height div 2-Height div 2;
end;

procedure TMainForm.DXTimerActivate(Sender: TObject);
begin
 Caption := Application.Title;
end;

procedure TMainForm.DXTimerDeactivate(Sender: TObject);
begin
 Caption := Application.Title + " [Pause]";
end;

procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);
begin
 if not DXDraw.CanDraw then exit;

 DXInput.Update;
 LagCount := 1000 div 60;
 DXSpriteEngine.Move(LagCount);
 DXSpriteEngine.Dead;

 DXDraw.Surface.Fill(0);
 DXSpriteEngine.Draw;

 with DXDraw.Surface.Canvas do
 begin
 Release;
 end;
 DXDraw.Flip;
end;

procedure TMainForm.DXDrawFinalize(Sender: TObject);
begin
DXTimer.Enabled := False;
end;

procedure TMainForm.DXDrawInitialize(Sender: TObject);
begin
DXTimer.Enabled := True;
end;

procedure TMainForm.FormCreate(Sender: TObject);
var
 i: Integer;
 PlayerSprite: TSprite;
begin
 ImageList.Items.MakeColorTable;
 DXDraw.ColorTable := ImageList.Items.ColorTable;
 DXDraw.DefColorTable := ImageList.Items.ColorTable;
 DXDraw.UpdatePalette;

 with TBackgroundSprite.Create(DXSpriteEngine.Engine) do
 begin
   Image := ImageList.Items.Find("background");
   SetMapSize(1, 1);
   Tile := True;
 end;

 for i:=0 to 100 do
   with TMonoSprite.Create(DXSpriteEngine.Engine) do
   begin
     Image := ImageList.Items.Find("lolik");
     X := random(5000);
     Y := random(1000);
     Z := 2;
     Width := Image.Width;
     Height := Image.Height;
     end;

PlayerSprite := TPlayerSprite.Create(DXSpriteEngine.Engine);
with TPlayerSprite(PlayerSprite) do
begin
Image := ImageList.Items.Find("lol");
Z := 2;
Width := Image.Width;
Height := Image.Height;
end;
end;

end.


 
SoS   (2003-12-24 17:01) [1]

никто примеров не видел в делфиХ ? =)


 
AxxxE   (2003-12-24 18:48) [2]

А здесь вообще карта есть?


 
SoS   (2003-12-24 21:08) [3]

вы бы откомпили бы лучше


 
dRake ©   (2003-12-25 21:27) [4]

Застрелить всех, кто пишет на делфиХ, используя эти убогие встроенные движки >:)


 
Ландграф Павел ©   (2003-12-25 22:12) [5]

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


 
SoS   (2003-12-25 22:53) [6]

думаеться надо создать двухмерный массив


 
SoS   (2003-12-27 22:07) [7]

так кто нибудь поможет ?


 
Cibernetic   (2003-12-28 04:43) [8]

Engine.X := -X+Engine.Width div 2-Width div 2;
Engine.Y := -Y+Engine.Height div 2-Height div 2;
В этих строчках и перемещаются спрайты по карте,
ограничивай значения  Engine.X и Engine.Y и будет тебе карта фиксированного размера. Вот и все.


 
SoS   (2003-12-28 15:27) [9]

в этих координатах насколько я понял показываеться местоположения героя на карте, в данном случае он посередине карты будет ходить, а как ограничать? можно пример?


 
Cibernetic   (2004-01-06 12:47) [10]

if Engine.X >1000 then Engine.X:=Engine.X,
дальше в таком же ограничиваешь слева, и по Y также.


 
Sos   (2004-01-10 02:14) [11]

не пашет, все равно идет и идет


 
TButton ©   (2004-01-10 23:39) [12]

забей ты на етот корявый engine пиши свой.


 
Sos   (2004-01-11 02:27) [13]

В том и дело что не могу а нужен 2д двиг с пиксельностью


 
smb   (2004-01-11 19:35) [14]


> if Engine.X >1000 then Engine.X:=Engine.X,

да это ведь что получется????
MaxX:integer;

MaxX:=1000;

if Engine.X >MaxX then Engine.X:=MaxX;

а что касается двумерного массива, то это просто сказка!!! создаешь две переменные Х и У и от них весь массив рисуешь с проверками ессно.


 
TButton ©   (2004-01-11 19:39) [15]

ну блин, сделай 2д двиг с пиксельностью. в чем проблема то?


 
Sos   (2004-01-11 22:08) [16]

ну типа не хватает серого =), это то что здесь выложил есть в samples в делфиХ, если кто может сделать нормальную карту то сделай плз, вообще не понятно почему она безконечная изначально, нигде не пишут там =)



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

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

Наверх




Память: 0.51 MB
Время: 0.022 c
1-1083916734
En
2004-05-07 11:58
2004.05.23
Контроль другого приложения через проект дельфи


1-1084292925
tower
2004-05-11 20:28
2004.05.23
Из памяти в файл. Как?


14-1083257601
DVM
2004-04-29 20:53
2004.05.23
Волшебство. Ярлыки появляются сами.


1-1084329754
Юрец2
2004-05-12 06:42
2004.05.23
Как уменьшить шрифт


9-1073822435
iudjen
2004-01-11 15:00
2004.05.23
помогите сдеать игру