I'm trying to use the Compare Method to sort out z-ordering, now I can get it to work with a Player Type, but if I have a PlayerType Type the function returns an Unhandled Exception error. Here is the code which works:
So the above works, but if we introduce a PlayerType it returns an error at Method Compare.
So I need to adjust the Method Compare code to allow for the PlayerType, but I'm not sure how?
Strict Type Entity Field x:Float,y:Float,speed:Float,dir:Float,maxspeed:Float, range:Float Field currentFrame:Int,startFrame:Int,lastFrame:Int,timer:Float,frameRate:Int Field image:TImage Field file Field font:TImageFont Field name:String Field health:Float End Type Type Player Extends Entity Field health:Float, mana:Float Field score:Int = 0 Function Create:Player(name:String,x,y) Local ent:Player = New Player ent.name = name ent.x = x ent.y = y ent.health = 50 ent.image = LoadAnimImage("Media/warrior.bmp",128,128,0,1) entity_list.AddLast(ent) Return ent End Function Method Update() If KeyDown(KEY_RIGHT) x = x +1 EndIf If KeyDown(KEY_LEFT) x = x -1 EndIf If KeyDown(KEY_DOWN) y = y +1 EndIf If KeyDown(KEY_UP) y = y -1 EndIf DrawImage image,x,y,0 End Method Method Compare( other:Object ) Return y -Player(other).y End Method EndType Graphics 640,480,0 Global entity_list:TList = CreateList() Local player1:Player = Player.Create("Mikey",50,50) While Not KeyHit(KEY_ESCAPE) Cls SortList (entity_list) For Local p:Player = EachIn entity_list p.Update() Next player1.x :+ (KeyDown(KEY_RIGHT) - KeyDown(KEY_LEFT))*2 player1.y :+ (KeyDown(KEY_DOWN) - KeyDown(KEY_UP))*2 Flip Wend
So the above works, but if we introduce a PlayerType it returns an error at Method Compare.
Strict Type Entity Field x:Float,y:Float,speed:Float,dir:Float,maxspeed:Float, range:Float Field currentFrame:Int,startFrame:Int,lastFrame:Int,timer:Float,frameRate:Int Field image:TImage Field file Field font:TImageFont Field name:String Field health:Float End Type '-------------------------------- Type PlayerType Function Create:PlayerType(name:String,anim_file:String) Local ent:PlayerType = New PlayerType ent.image = anim_file ent.name = name entity_list.AddLast(ent) Return ent End Function End Type '-------------------------------- Type Player Extends Entity Field playerType:PlayerType Field health:Float, mana:Float Field score:Int = 0 Function Create:Player(name:String,x,y,playerType:PlayerType) Local ent:Player = New Player ent.name = name ent.x = x ent.y = y ent.health = 50 ent.playerType = playerType ent.image = LoadAnimImage(playerType.image,128,128,0,1) entity_list.AddLast(ent) Return ent End Function Method Update() If KeyDown(KEY_RIGHT) x = x +1 EndIf If KeyDown(KEY_LEFT) x = x -1 EndIf If KeyDown(KEY_DOWN) y = y +1 EndIf If KeyDown(KEY_UP) y = y -1 EndIf DrawImage image,x,y,0 End Method Method Compare( other:Object ) Return y -Player(other).y 'ERROR HERE End Method EndType Graphics 640,480,0 Global entity_list:TList = CreateList() Global warrior:PlayerType=PlayerType.Create("Warrior")',"Media/warrior.bmp" 'Player instance Local player1:Player = Player.Create("Mikey",50,50,warrior) While Not KeyHit(KEY_ESCAPE) Cls SortList (entity_list) For Local p:Player = EachIn entity_list p.Update() Next player1.x :+ (KeyDown(KEY_RIGHT) - KeyDown(KEY_LEFT))*2 player1.y :+ (KeyDown(KEY_DOWN) - KeyDown(KEY_UP))*2 Flip Wend
So I need to adjust the Method Compare code to allow for the PlayerType, but I'm not sure how?