![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
в примерах делфиХ нашел пример, но там безконечная карта!! как... [Delphi, Windows]
SoS © (2003-12-23 21:58:00)как менять ее размер, мне надо 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 (2004-01-11 22:08:00) [1]ну типа не хватает серого =), это то что здесь выложил есть в samples в делфиХ, если кто может сделать нормальную карту то сделай плз, вообще не понятно почему она безконечная изначально, нигде не пишут там =)
TButton (2004-01-11 19:39:00) [2]ну блин, сделай 2д двиг с пиксельностью. в чем проблема то?
smb (2004-01-11 19:35:00) [3]
> if Engine.X >1000 then Engine.X:=Engine.X,
да это ведь что получется????
MaxX:integer;
MaxX:=1000;
if Engine.X >MaxX then Engine.X:=MaxX;
а что касается двумерного массива, то это просто сказка!!! создаешь две переменные Х и У и от них весь массив рисуешь с проверками ессно.
Sos (2004-01-11 02:27:00) [4]В том и дело что не могу а нужен 2д двиг с пиксельностью
TButton (2004-01-10 23:39:00) [5]забей ты на етот корявый engine пиши свой.
Sos (2004-01-10 02:14:00) [6]не пашет, все равно идет и идет
Cibernetic (2004-01-06 12:47:00) [7]if Engine.X >1000 then Engine.X:=Engine.X,
дальше в таком же ограничиваешь слева, и по Y также.
SoS (2003-12-28 15:27:00) [8]в этих координатах насколько я понял показываеться местоположения героя на карте, в данном случае он посередине карты будет ходить, а как ограничать? можно пример?
Cibernetic (2003-12-28 04:43:00) [9]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-27 22:07:00) [10]так кто нибудь поможет ?
SoS (2003-12-25 22:53:00) [11]думаеться надо создать двухмерный массив
Ландграф Павел (2003-12-25 22:12:00) [12]Блин, одни понты кидают... короче самый простой способ это завести глобальные коордианаты, и при движении уже накручивать, или уменьшать их... ну и если больше ста, то оставить их сто, не накручивать... надеюсь сам разберешься
dRake (2003-12-25 21:27:00) [13]Застрелить всех, кто пишет на делфиХ, используя эти убогие встроенные движки >:)
SoS (2003-12-24 21:08:00) [14]вы бы откомпили бы лучше
AxxxE (2003-12-24 18:48:00) [15]А здесь вообще карта есть?
SoS (2003-12-24 17:01:00) [16]никто примеров не видел в делфиХ ? =)