Type an Funktion weitergeben

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

snörkl

Betreff: Type an Funktion weitergeben

BeitragDo, Jul 16, 2009 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin moin, nach langer Programmierpause melde ich mich mal wieder mit einer Frage, auf die ich trotz google-und sufurecherche keine antwort finden konnte. Und zwar habe ich folgendes Problem; ich möchte eine funktion schreiben, die z.B. Beim Treffen eines gegners automatisch eine frei wählbare Anzahl von Schaden zufügt, dieser verteilt sich wiederum auf shield und armor. Das Problem besteht darin, dass die Funktion aus einer tlist eachin schleife heraus aufgerufen wird und ich, um die funktion für alle gegner einsetzen zu können, nicht in die funktion schreiben kann, welchem typ die variable, die zur durchführung nötig ist angehört.
Um etwas klarheit zu schaffen hier die relevanten ausschnitte aus dem code (schreibe nicht vom computer aus, man möge mir die formatierung verzeihen)

Code: [AUSKLAPPEN]

for local e:Tenemy = EachIn Tenemylist
    For local s:Tplayer = eachIn Tplayerlist
        If imagescollide...
        s.exist = 0
        EnemyHealth(e, -1)   'hier das problem, e ist typ tenemy, das ist aber nicht auf andere gegner übertragbar!
    Next
next

.
.
.

Function enemyHealth(enemy:?typ?, health:int =0, optArmor:int = 0, optShield:int = 0)
    Local temphealth:int = 0

    If enemy.shield >=  0
        enemy.shield:+health
    Else
        temphealth = enemy.shield + health
        enemy.shield = 0
        enemy.armor:+temphealth
    End If

'hier noch die anderen funktionen, irrelevant für das Beispiel

End Function



vielen dank.

Holzchopf

Meisterpacker

BeitragDo, Jul 16, 2009 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
?typ? = TEnemy schon probiert?
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

snörkl

BeitragDo, Jul 16, 2009 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, aber ich möchte die funktion allgemeingültig halten, d.h., dass sie sowohl mit TEnemy als auch beispielsweise mit TEnemy2 funktioniert, welches bei einem festlegen auf TEnemy dann nicht mehr der Fall wäre.

Xeres

Moderator

BeitragDo, Jul 16, 2009 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann Leite Tenemy und Tenemy2 von einem Type TEnemy_Base (o.ä.) ab.
TEnemy_Base enthält dann die Fields, die jeder Enemy braucht, und schön ist's.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

snörkl

BeitragDo, Jul 16, 2009 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für eure so schnellen Antworten!
Ich werde mich dann morgen damit nochmal genauer auseinandersetzen, wie sähe so ein type-type denn dann aus?
Sind TEnemy1 und 2 dann noch eigenständige types (was für meinen code wichtig wäre) oder werden sie zu elementen des types Tenemy_base?

Xeres

Moderator

BeitragDo, Jul 16, 2009 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Reicht dir dieses Beispiel?

BlitzMax: [AUSKLAPPEN]
SuperStrict

Type TEnemy_Base Abstract
Field Life:Int, Shield:Int

Method New()
Self.Life = 100
Self.Shield = 100
End Method

Function DealDMG(E:TEnemy_Base, dmg:Int)
E.Life:-dmg
End Function
End Type

Type TEnemy1 Extends TEnemy_Base

End Type

Type TEnemy2 Extends TEnemy_Base

End Type

Local e:TEnemy1 = New TEnemy1
Print(e.Life + " " + e.Shield)
TEnemy_Base.DealDMG(e, 50)
Print(e.Life + " " + e.Shield)
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

snörkl

BeitragDo, Jul 16, 2009 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank, das genügt mir vollends Smile
somit ist meine Frage dann eigentlich auch schon geklärt, an alternativen lösungsvorschlägen bin ich natürlich trotzdem immer interessiert!

Lg,
snoerkl

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group