我将类型声明为:
TPlayer = class(TObject)
TBullet = class(TObject)
TEnemy = class(TObject)
和对象:
Player: TPlayer;
PlayerBullets: Array[1..20] of TBullet;
Enemies: Array[1..20] of TEnemy;
EnemyBullets: Array[1..20] of TBullet;
现在我想创建TBullet构造函数,它可以处理来自玩家和敌人的信息。简而言之,我希望这个构造函数能够处理TPlayer和TEnemy对象。
我的想法是:
constructor TBullet.Create(const Source: TObject);
可悲的是它不起作用。怎么做?
编辑: 我的确切问题是:当我将TPlayer或TEnemy对象传递给此构造函数时,它不会看到这些对象的属性。例如:TPlayer有attr xPos。如果我使用Bullet.Create(播放器)并在TBullet.Create中使用Source.xPos我收到错误。
答案 0 :(得分:3)
我可以想出3种方法来实现这一点。
我的意思是:
NSNotification
哪种解决方案最好?这本身可能是一场辩论,在很大程度上取决于你的具体情况。仅根据您班级的名称,我猜选项1可能有效。可以创建“TCharacter”类,并将其用作TCharacter和TEnemy的基础calss。但这只是猜测。
答案 1 :(得分:0)
在Windows中,使用通用方法从父对象继承(可以在父对象中抽象)或实现接口(再次可以自定义行为)几乎没有什么不同。 如果您有枚举commonParticipant(cpPlayer,cpEnemy),则Windows允许访问最终父IUnknown,然后再次访问子接口,该子接口标识该子进程特有的方法,即,您可以传递包含commonParticipant的ICommonParticipant,然后与iPlayer或IEnemy界面