Returning Entities assigned to Type Fields
Blitz3D Forums/Blitz3D Beginners Area/Returning Entities assigned to Type Fields
| ||
| Hello there! I'm getting started on the code for my biggest game yet, and (big surprise) I've run into an issue with the earliest stages of the code. What I want to do is to make a function (CREATE_DUMMY) that creates a new instance of a Type called "CHAR_DUMMY" and assigns a sprite to the CHAR_DUMMY instance's "mesh" field via CopyEntity. However, it seems that the CREATE_DUMMY function won't return any values assigned to the CHAR_DUMMY instance I've created. Here's the part of the code that's giving me trouble:
;;;;;;;;;;;;;;;;;;;;
;LOAD SPRITE SHEETS;
;;;;;;;;;;;;;;;;;;;;
Global sprite_generic = LoadTexture("stand.png", 2)
.CREATE_SPRITE
Function CREATE_SPRITE(name, sprite_sheet)
character = CreateSprite()
EntityTexture character, sprite_generic
NameEntity character, name
Return name
End Function
.X
.CHAR_DUMMY
;;;;;;;;;;;;;;;;;;;
;"DUMMY" CHARACTER;
;;;;;;;;;;;;;;;;;;;
;Type variables
Type CHAR_DUMMY
Field ID%
Field damage
Field lives
Field xpos#
Field ypos#
Field direction
Field airborne
Field attacking
Field stunned
Field velx#
Field vely#
Field shield
Field mesh
End Type
;Creation function
Function CREATE_DUMMY.CHAR_DUMMY(player, dummy1)
Local player1.CHAR_DUMMY = New CHAR_DUMMY
player1\lives = 5
player1\direction = DIR_LEFT
player1\mesh = CopyEntity(dummy1)
Return player1.CHAR_DUMMY
End Function
;Update function
Function UPDATE_DUMMY.CHAR_DUMMY(character.CHAR_DUMMY)
If KeyDown(KEY_LEFT)
character\xpos = character\xpos - 2
ElseIf KeyDown(KEY_RIGHT)
character\xpos = character\xpos + 2
EndIf
PositionEntity character\mesh, character\xpos, character\ypos, 0
End Function
CREATE_SPRITE(dummy1, 0)
CREATE_DUMMY(one, dummy1)
While Not KeyDown(KEY_ESC)
WaitTimer FRAMERATE
UPDATE_DUMMY(player1.CHAR_DUMMY)
UpdateWorld
RenderWorld
Flip
Wend
End
Thanks for your time! |
| ||
| To be honest there are alot of issues with your code. You aren't actually assigning a variable to what the CREATE_DUMMY function is returning. You really need to understand the variable types and use better naming conventions before you go much further or you'll be in a world of pain later. For example, the function below requires a name parameter which presumably should be a string ( $ ) in order for the entity to then be named. As it stands you pass in dummy1 as the name, which is an integer converts to 0. You return name so return 0. You should be returning the character variable as this is the entity. Even then, you don't actually have a variable to store what is returned!! Function CREATE_SPRITE(name, sprite_sheet) character = CreateSprite() EntityTexture character, sprite_generic NameEntity character, name Return name End Function If you are going to be reusing the sprite in each dummy_type created then it's best to create a global reference to the sprite, hide it and just copyentity the global version. Anywho, I made some modification which may make more sense to you ..
;;;;;;;;;;;;;;;;;;;;
;LOAD SPRITE SHEETS;
;;;;;;;;;;;;;;;;;;;;
Global TEXTURE = LoadTexture("stand.png", 2)
;create a global version of the sprite for re-use
Global SPRITE = CREATE_SPRITE( "This is the Name", 0 )
;Type variables
Type CharType
Field ID%
Field damage
Field lives
Field xpos#
Field ypos#
Field direction
Field airborne
Field attacking
Field stunned
Field velx#
Field vely#
Field shield
Field mesh
End Type
;create a dummy and assign it to a global variable Player1 for later reference
Global Player1.CharType = CREATE_CHARACTER()
While Not KeyDown( KEY_ESC )
WaitTimer FRAMERATE
UPDATE_CHARACTER( Player1 )
UpdateWorld
RenderWorld
Flip
Wend
End
;============================================================
;============================================================
;============================================================
Function CREATE_SPRITE( Name$, sprite_sheet = 0 )
Local sprite = CreateSprite()
EntityTexture sprite, TEXTURE
NameEntity sprite, Name
HideEntity sprite
Return sprite
End Function
;============================================================
;============================================================
;============================================================
;Creation function
Function CREATE_CHARACTER.CharType( Player = 0, Dummy1 = 0 )
Local this.CharType = New CharType
this\lives = 5
this\direction = DIR_LEFT
this\mesh = CopyEntity( SPRITE )
Return this
End Function
;============================================================
;============================================================
;============================================================
;Update function
Function UPDATE_CHARACTER( this.CharType )
If KeyDown(KEY_LEFT)
this\xpos = this\xpos - 2
ElseIf KeyDown(KEY_RIGHT)
this\xpos = this\xpos + 2
EndIf
PositionEntity this\mesh, this\xpos, this\ypos, 0
End Function
|
| ||
| I've been playing around with that code you posted, and I have a much better idea of what I need to do now. I'm also going to have to study up on other suffixes (or whatever they're called) other than just '#' and '$'. But anyways, thanks so much for helping me out! I'll remember to list you in the opening credits for the game. :) |