Форум: "Игры";
Текущий архив: 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