用delphiX编小游戏。Tspriteengine控件怎么用?怎么让它与Timagesprite对象联系起来?简单地说就是怎么能显示和移动timagesprite???(在

koy0755 2004-01-11 12:23:03
delphiX控件,我觉得最难用就是Tspriteengine了。不知怎么用的。请用过的大是解释一下。我现在连怎么样显示精灵都还没弄懂。
...全文
114 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
S.F. 2004-07-01
  • 打赏
  • 举报
回复
下载我的单机泡泡堂的源码看看,是用delphix写的

http://community.csdn.net/Expert/TopicView.asp?id=3100736
sxy_9761 2004-06-26
  • 打赏
  • 举报
回复
procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);
begin
if not DXDraw.CanDraw then exit;

DXInput.Update;

if FMoveMode then
LagCount := 1000 div 60;

DXSpriteEngine.Move(LagCount);
DXSpriteEngine.Dead; /* 注意这里 */

{ Description }
DXDraw.Surface.Fill(0);
DXSpriteEngine.Draw;

{ Frame rate display }
with DXDraw.Surface.Canvas do
begin
Brush.Style := bsClear;
Font.Color := clWhite;
Font.Size := 12;
Textout(0, 0, 'FPS: '+inttostr(DXTimer.FrameRate));
Textout(0, 24, 'Sprite: '+inttostr(DXSpriteEngine.Engine.AllCount));
Textout(0, 48, 'Draw: '+inttostr(DXSpriteEngine.Engine.DrawCount));
if FMoveMode then
Textout(0, 72, 'Time mode: 60 FPS')
else
Textout(0, 72, 'Time mode: Real time');

Release;
end;

DXDraw.Flip;
end;
sxy_9761 2004-06-26
  • 打赏
  • 举报
回复
注意调用:
DXSpriteEngine.Dead;
amdcwf 2004-06-21
  • 打赏
  • 举报
回复
: S.F.(CSDN:896410000)
交个朋友吧
我的QQ
55806658
progray 2004-01-19
  • 打赏
  • 举报
回复
delphiX是个什么东西啊,我查查的。做游戏很好吗?
koy0755 2004-01-19
  • 打赏
  • 举报
回复
to cst01()

就是嘛。可是为什么经过那个Timagesprite都不会消失?
cst01 2004-01-18
  • 打赏
  • 举报
回复
奇怪,你的代码好象没什么错误呀
cst01 2004-01-18
  • 打赏
  • 举报
回复
看一下这一段,可能有启发
type
TMonoSprite = class(TImageSprite)
private
FCounter: Double;
FS: Integer;
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
inherited DoMove(MoveCount);
PixelCheck := True;
FCounter := FCounter + (100/1000)*MoveCount;
X := X+Sin256(Trunc(FCounter))*(200/1000)*MoveCount;
Y := Y+Cos256(Trunc(FCounter))*(200/1000)*MoveCount;

if not Collisioned then
begin
Inc(FS, MoveCount);
if FS>200 then Dead;
end;
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;
koy0755 2004-01-16
  • 打赏
  • 举报
回复
怎么用的人那么少?
koy0755 2004-01-15
  • 打赏
  • 举报
回复
已经用贴了,在三楼。
S.F. 2004-01-15
  • 打赏
  • 举报
回复
把代码全部都帖上来瞧瞧?
koy0755 2004-01-14
  • 打赏
  • 举报
回复
当然有。我好像已经交了你了。我的QQ:173257128

但是我这样的做法也没错的啊。为什么精灵就是不能删除。

procedure Tplayersprite.docollision(sprite:....)
begin
sprite.dead;
done:=false;
end;

我这个做法只是为了测试一下碰撞,只要tplayersprite与其它精灵产生碰撞了,那个精灵就死。然后我创建一个tplayersprite的实便,再创建一个Timagesprite的实便。然后把Tplaysprite移去Timagesprite那里。不知为什么Timagesprite就是不会消失。
S.F. 2004-01-14
  • 打赏
  • 举报
回复
要 让精灵消失是 Dead方法;判断碰撞是根据传递的类去检测,比如
procedure docollision(Sprite:TSprite;....
begin
if sprite is TMonSprite then
Dead;//TmonSprite 是你自己扩展的怪物精灵类...
end;

有兴趣交个朋友一起研究delphix的引擎细节吗?
koy0755 2004-01-14
  • 打赏
  • 举报
回复
谢谢!
产生动画已基本解决。
animstart
animpos
animcount
animspee..
问题是我参考demo和初步看了一下delphiX的源代码。
在docollision里作碰撞时的处理(不是这样的吗?)。可是这种处理不被调用。并且collisioned属性一直都是true.证明了他并sprite并没有产生碰撞。不知为什么。
麻烦看看我的上面的代码。
//Tplay.docollision是用于产生碰撞时,让对方消失。为什么没有sprite不什么消失呢?
S.F. 2004-01-14
  • 打赏
  • 举报
回复
产生碰撞,delphix 提供的有机制,并且支持像素级碰撞检测;

移动的行走是根据精灵的动画属性去设置的;在create中和domove 中都可以修改,是Ani 开头命名的,自己找找
lgqTiger 2004-01-14
  • 打赏
  • 举报
回复
up
koy0755 2004-01-12
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DXInput, DXClass, DXDraws, DXSprite;

type
TForm1 = class(TForm)
DXImageList1: TDXImageList;
DXDraw1: TDXDraw;
DXTimer1: TDXTimer;
DXInput1: TDXInput;
DXSpriteEngine1: TDXSpriteEngine;
procedure FormCreate(Sender: TObject);
procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

tplayer=class(TImageSprite)
protected
procedure DoCollision(Sprite:TSprite;var Done:Boolean);override;
procedure domove(movecount:integer);override;
end;

var
Form1: TForm1;
s1,s2:Tplayer;
temp:Timagesprite;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
temp:=Timagesprite.Create(dxspriteengine1.Engine);
temp.image:=dximagelist1.Items[0];
temp.x:=100;
temp.y:=100;

s1:=Tplayer.Create(dxspriteengine1.Engine);
s1.Image:=dximagelist1.Items[0];
s1.X:=200;
s1.y:=300;
end;

{ tplay }
procedure tplayer.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
sprite.dead;
done:=false;
end;

procedure tplayer.domove(movecount: integer);
begin
inherited domove(movecount);
if isleft in form1.DXInput1.States then x:=x-4;
if isright in form1.DXInput1.States then x:=x+4;
if isup in form1.dxinput1.States then y:=y-4;
if isdown in form1.DXInput1.States then y:=y+4;
collision;
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
dxinput1.Update;
dxdraw1.Surface.Fill(0);
dxspriteengine1.Move(30);
dxspriteengine1.Dead;
dxspriteengine1.Draw;
dxdraw1.Flip;
end;

end.

//Tplay.docollision是用于产生碰撞时,让对方消失。没什么没有sprite不什么消失呢?
koy0755 2004-01-12
  • 打赏
  • 举报
回复
up
koy0755 2004-01-12
  • 打赏
  • 举报
回复
我知道Tspritengine是管精灵的,可就是不会用。
不知怎么产生碰撞。和不知怎么产生人物行走时的动画。
S.F. 2004-01-12
  • 打赏
  • 举报
回复
Tspriteengine 这个玩意儿是管理精灵的………………………………………………………………………………

建议楼主好好看看看看看delphix 带的 demo
我写的有个例子,注解很详细的跳舞机
http://expert.csdn.net/Expert/TopicView1.asp?id=2317510
加载更多回复(3)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧