types + funktionen = wirr warr

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bobbleboy

Betreff: types + funktionen = wirr warr

BeitragSo, Jul 25, 2010 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
mir geht es darum endlich zu verstehen wie man vernünftig types und funktionen kombiniert.
hier mein problem als verkürzten code:
Code: [AUSKLAPPEN]

Type gegner
Field x
Field y
Field hp
Field e
Field bild
Field name
Field speed
Field rasse$
End Type

While Not KeyDown(1)
   Cls
   drawmap()
   For i=1 To gegnermax
   g.gegner = spawngegner.gegner()
   Next
   For g = Each gegner
      drawgegner()
      movegegner()
   Next
Wend
End

Function spawngegner()
   f.gegner = New gegner
   Return f
End Function


lauter fehlermeldungen, egal was ich versuche

ich habe mir jetzt etliche tutorial durchgelesen, aber die erleuchtung lässt auf sich warten.
kann mir jemand zu einem tutorial verhelfen, dass genau das beschreibt, oder es mir so erklären?

Xeres

Moderator

BeitragSo, Jul 25, 2010 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau in die FAQ und Tutorials
Das spezielle Problem hier ist, das die Funktion den passenden Rückgabetyp haben muss:
BlitzBasic: [AUSKLAPPEN]
Function spawngegner.gegner()
f.gegner = New gegner
Return f
End Function
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)
 

Bobbleboy

BeitragSo, Jul 25, 2010 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
wie gesagt ich habe da nachgesehen.
Code: [AUSKLAPPEN]
Function spawngegner.gegner()
   f.gegner = New gegner
   Return f.gegner
End Function

funktioniert.
aber warum?

Xeres

Moderator

BeitragSo, Jul 25, 2010 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe den exakten Code oben schon hingeschrieben Exclamation
Du musst in der Funktionsdefiniton den Rückgabetyp festlegen, bei der Anwendung hast du ja schon
Code: [AUSKLAPPEN]
spawngegner.gegner()
stehen - da kann man dass auch weglassen;
Code: [AUSKLAPPEN]
spawngegner()


Nachtrag:
Siehe Function

Oder auch zum selber probieren:
Code: [AUSKLAPPEN]
Print test1()
Print test2()
Print test3()
WaitKey()

Function test1$()
   Return "1.055ABC"
End Function

Function test2#()
   Return "1.055ABC"
End Function

Function test3%()
   Return "1.055ABC"
End Function
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)

Ana

BeitragSo, Jul 25, 2010 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß zwar nicht wirklich wie Biltzbasic geschrieben ist, aber ich denke du musst das angeben, weil jeder Type eine Reservierung von Speicherplatz ist. Das geschieht jedesmal wenn New verwendet wird, je nach dem wie dein Type aufgebaut ist werden dann Platz für 2 Ints ein Float und eine Speicheradresse für Strings freigeräumt, oder wie er halt aussieht. Die Variable in dem du den Type dann speicherst enthält nur die Adresse wo der Eintrag des Types gespeichert ist. An diesen wird dann gesprungen und wenn du den 2 Int ansprechen willst wird von dem in der typevariable gespeicherten Wert so und so viel Bit weiter gegangen (32?).

Wenn du nun der Funktion nicht sagst wie sie den Rückgabewert interpretieren soll, dann macht sie das standard mäßig als Int. Da hast dann eine tolle Zahl, die neben ziemlich groß auch noch völlig unnütz ist. Das musst du übrigens und nebenbei ja auch bei Float oder Strings mit # oder $ tun.

Zu Fehlern kommt es dann wenn du den "Eigentlich ein Type - Int " wert wieder als Type behandelst, und das ist auch ganz gut so.

Verständlich?

Und wie gesagt keine garantie dafür das nur irgendwas davon wirklich stimmt, aber die dinge verhalten sich so als ob, soweit ich das sehe^^

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group