Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.041 c
1-1084343258
MakNik
2004-05-12 10:27
2004.05.23
FloatToStr(Sums)


8-1078160093
__Alex__
2004-03-01 19:54
2004.05.23
Компонент для загрузки AVI из потока


1-1084302070
I.Ru.Ru
2004-05-11 23:01
2004.05.23
Выбор при открытии файла Excel


14-1083828472
Sour
2004-05-06 11:27
2004.05.23
Object Inspector


11-1070349986
Officeman
2003-12-02 10:26
2004.05.23
FTP на KOL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский