有人会用delphiX吗?用它编小游戏。Tspriteengine控件怎么用?一般是用什么方法产生精灵行走时的动作的,和产生碰撞的? (80分)

  • 主题发起人 主题发起人 talent002
  • 开始时间 开始时间
T

talent002

Unregistered / Unconfirmed
GUEST, unregistred user!
有人会用delphiX吗?用它编小游戏。Tspriteengine控件怎么用?一般是用什么方法产生精灵行走时的动作的,和产生碰撞的?
请说明一下
1、Timagesprite.domove(movecount:integer);这个过程是在什么时候执行的.

2、Tspriteengine.dead和Timagesprite.dead有什么区别?为什么我看的demo里Tspriteengine.draw之前都要调用Tspriteengine.dead?

3、docollision是不是一个精灵与另一个精灵产生碰撞时发生的事件?为什么有时我的程序不会击发docollision。而且collisioned在任何时候都是true.(如下面的程序)。

4、Tbackgroundsprite。能在多个局部区域与其它精灵产生碰撞吗?如果可以怎么做??


4个问题,每个20分(分少没办法)。
 
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不什么消失呢?
 
估计你要失望了
 
建议:
学DelphiX不如直接学DirectX
 
现在不讨论学dephiX还是directX的问题。按你这样说学delphi不如直接学 C++。如果学会directX当然好,但是毕竟是初学,delphi在这方面的资料很少。我觉得应该一步一步来。先用delphiX做出一些东西。然后再去研究delphiX的代码。然后再学习directX.
 
作者: Nelson Chu.
演示如何直接在Windows 95桌面上做精灵动画
http://www.csdn.net/dev/delphi/Samples/desk_spr.zip
看看这个对你有没有用?
 
好像不是directX的,但是也挺有用。可惜我的问题还没解决。
 
看看它的源码
 
看了,他是测试是否碰撞,如果是就调用docollision。就是不知为什么我的过程不被调用。而且看了源代码好像是collisioned=true是没有产生碰撞,如果=false反而产生了磁撞。
 
我在www.playicq.com上传了不少用delphix开发的游戏!你去游戏代码区下去吧!
 
源码看过了,demo也看过了。就是不知道为什么我这样不能产生碰撞。能帮忙看一下吗?(上面的代码)
 
没太理解你说的什么意思。。。。
你先参考一下。。。。

每次DXTimer1.OnTimer触发一次 所有的Domove执行一次 不知道movecount是干什么的 我是当没有他处理的 望高手告知
按你的写法 应该是2个精灵一撞后 2个都Dead掉。。。。
建议每种类型的Sprite都继承出独立的一个
比如 TEnemySprite = class(TImageSprite) TPlayerSprite = class(TImageSprite)
每种类型都定义自己的DoCollision
这样
Procedure TPlayerSprite.DoCollision(Sprite: TSprite; var Done: Boolean);
Begin
If Sprite is TEnemySprite then Sprite.Dead;
End;
就可以TPlayer撞TEnemy后 TPlayer 没事而 TEnemy Dead
 
建议:
学DelphiX不如直接学DirectX
对于专业游戏来说我比较同意!
 
我也是这几天才开始看这些有关的东西的,MOVECOUNT好像是贞数,默认值是16贞
 
1.domove在Tspriteengine.move时候被触发
2.Tspriteengine.dead是精灵引擎的释放,他管理了很多精灵.Timagesprite.dead精灵的释放.
3.你需要在domove的时候调用collision来触发碰撞判断
4.Tbackgroundsprite也是一个精灵,可以碰撞,判断和一般精灵碰撞同
 
学DelphiX不如直接学DirectX
对于专业游戏来说我比较同意!
:那delphi支持DirectX吗,,做大型游戏还是用C++吧,不知道未来的C#程序能不能做游戏
 
我用delphix做过坦克游戏,里面涉及到你所说的问题,碰撞,游戏还未完整,剩下AI部分和一些bug,希望共同解决,谢谢,望成为游戏同盟!我的QQ:40932627(加我请注明:游戏同盟 ),Email :myri@163.com
 

Similar threads

I
回复
0
查看
707
import
I
I
回复
0
查看
778
import
I
I
回复
0
查看
789
import
I
I
回复
0
查看
600
import
I
后退
顶部