Types in Function

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Chester

Betreff: Types in Function

BeitragSa, Jan 08, 2005 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi@all
Kann mir mal jemand verraten warum das nicht funtzt:

Code: [AUSKLAPPEN]

Function CreateScelett(name,x,y)
name.gegner = New gegner
name\art = scelett
End function


Ich bekomme einen "VariablenType Mismatch"

simi

BeitragSa, Jan 08, 2005 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das heisst, dass du 2 Variablen mit dem gleichen Namen hast.
In deinem Beispiel hast du die Type variable und noch die Locale Variable name.
In Code:
Code: [AUSKLAPPEN]

Function CreateScelett(name2,x,y)
name.gegner = New gegner
name\art = scelett
End function


cu simi

Artemis

BeitragSa, Jan 08, 2005 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
tu mal en längeres code stück wo du die types und die variablen definierst

Vertex

BeitragSa, Jan 08, 2005 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn schon, dann als Rückgabewert:
Code: [AUSKLAPPEN]
Type TEnemy
   Field Name$
   Field X
   Field Y
   ; usw.
End Type

MyEnemy.TEnemy = CreateEnemy("Test", 10, 20)

Print MyEnemy\Name$
Print MyEnemy\X
Print MyEnemy\Y
WaitKey

Function CreateEnemy.TEnemy(Name$, XPos, YPos)
   Local Enemy.TEnemy = New TEnemy
   
   Enemy\Name$ = Name$
   Enemy\X     = XPos
   Enemy\Y     = YPos
   
   Return Enemy
End Function


mfg olli
vertex.dreamfall.at | GitHub

Chester

BeitragSa, Jan 08, 2005 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
lol thx

Chester

BeitragSa, Jan 08, 2005 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab jetzt das hier:

Code: [AUSKLAPPEN]

Function CreateSkelettSword.gegner(x,y)
Local enemy.gegner = New gegner
enemy\art = skelett_sword
enemy\x = x*64
enemy\y = y*48
enemy\maxenergie = 10
enemy\energie = 10
enemy\geh_speed = 1
enemy\minschaden = 2
enemy\maxschaden = 8

Return enemy
End function

Diese Function habe ich jetzt einmal als Globale am Anfang des Codes.
Code: [AUSKLAPPEN]
Global ske_sw1.gegner = createskelettsword(10,10)


Im Code will ich aber jetzt das hier machen:
Code: [AUSKLAPPEN]

Function UpdateSkelettSword()
enemy\schaden = Rnd(enemy\minschaden,enemy\maxschaden)
Return enemy
End function


Ich habe dann im Code stehen:
Code: [AUSKLAPPEN]
ske_sw1 = updateSkelettSword()


Ich bekomme aber einen "Illegal Type Conversion"

Was mache ich falsch?

Vertex

BeitragSa, Jan 08, 2005 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Function UpdateSkelettSword()
enemy\schaden = Rnd(enemy\minschaden,enemy\maxschaden)
Return enemy
End function


Was soll bitte schön das bringen?

Eine Funktion gibt eine Instanz von einem Type zurück, ist aber nicht im Funktionskopf deklariert. Du greifst auf eine Instanz zu, die es anscheinend garnicht gibt, es gibt nur ske_sw1.

Enemy wurde bei CreateSkelettSword als LOCAL dekaliert, nach dem die Funktion beendet wurde, ist Enemu in den unendlichen Weiten des Stacks.

Ich vervollständige mal kurz mein Beispiel da oben.
mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragSa, Jan 08, 2005 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
So hier das Beispiel:
Code: [AUSKLAPPEN]
Type TEnemy
   Field Name$
   Field X
   Field Y
   Field Destruction
   ; usw.
End Type

Alien.TEnemy = CreateEnemy("Alien", 10, 20)
Print GetEnemyName$(Alien)
Print "X: "+GetEnemyX(Alien)
Print "Y: "+GetEnemyY(Alien)
Print ""

SetEnemyPosition(Alien, 30, 40)
Print "X: "+GetEnemyX(Alien)
Print "Y: "+GetEnemyY(Alien)

DeleteEnemy(Alien) : Alien = Null

WaitKey
End

Function CreateEnemy.TEnemy(Name$, XPos, YPos)
   Local Enemy.TEnemy = New TEnemy
   
   Enemy\Name$       = Name$
   Enemy\X           = XPos
   Enemy\Y           = YPos
   Enemy\Destruction = 0
   
   Return Enemy
End Function

Function DeleteEnemy.TEnemy(Enemy.TEnemy)
   Delete Enemy
End Function

Function UpdateEnemy(Enemy.TEnemy)
   Enemy\Destruction = Enemy\Destruction+1
End Function

Function SetEnemyPosition(Enemy.TEnemy, XPos, YPos)
   Enemy\X = XPos
   Enemy\Y = YPos
End Function

Function GetEnemyName$(Enemy.TEnemy)
   Return Enemy\Name$
End Function

Function GetEnemyX(Enemy.TEnemy)
   Return Enemy\X
End Function

Function GetEnemyY(Enemy.TEnemy)
   Return Enemy\Y
End Function

Function GetEnemyDestruction(Enemy.TEnemy)
   Return Enemy\Destruction
End Function


Wenn du sauber Programmieren willst, sprich objektorientiert(so weit es in BlitzClassic überhaupt möglich ist), machst du das so, wie oben gezeigt.

mfg olli
vertex.dreamfall.at | GitHub

Chester

BeitragSa, Jan 08, 2005 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Thx Vertex, hiermit ernenne ich dich zum Retter in der Not Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group