Ne Frage zu Types

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

HamsDa

Betreff: Ne Frage zu Types

BeitragMo, Jul 17, 2006 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, leute ^^
Da dies mein erster Beitrag ist, bitte ich um Nachsicht wegen eventueller Fehler meinerseits!

Nun zu meinem Problem:
(Da ich es nicht wirklich in Worte fassen kann, werde ich es euch anhand eines Quellcodeausschnittes in C++ erklären) ^^

Code: [AUSKLAPPEN]

Class CRocket{
  //konstruktor, methoden, variablen, destruktor, bla bla bla
}

CRocket Rakete[5]; // Hiermit erstelle ich ja 5 Typen der Klasse CRocket


Nun möchte ich exakt sowas in BlitzMax realisieren.
Das dürfte dann ja so aussehen:
Code: [AUSKLAPPEN]

Type TRocket
  Field x,y
  // Methoden, bla bla bla
EndType

Local rocket:TRocket[5]


Nun weiß ich aber nicht, wie ich die Variablen x und y den einzelnen "rocket"-Variablen zuweise.

"rocket.x = 12" funktioniert da ja nicht mehr, wie soll ich das nun bewerkstelligen?
oder wäre es generell besser, dieses Problem etwas anders anzugehen?

Danke schonmal im Voraus ^^

GreeZ[/code]

Jolinah

BeitragMo, Jul 17, 2006 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, und willkommen im Forum Wink

Ganz einfach:

Code: [AUSKLAPPEN]
rocket[0].x = 10
rocket[1].x = 20
 

HamsDa

BeitragMo, Jul 17, 2006 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
*an kopf fass*
wie konnte ich nur so dumm sein? ^^
ich hab's sicher auf 5 arten versucht, aber genau die richtige fällt mir nich ein XD
danke vielmals ^^

Farbfinsternis

BeitragMo, Jul 17, 2006 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du Dir schon einen C++ Quelltext zu Rate ziehst, wäre es vielleicht gut auch die Typisierung auf BMax zu übertragen:

  • Leite Types mit einem "T" ein, also "TRocket". Hast Du gemacht, wollte es nur für die anderen Lemminge erwähnen
  • Verwende die Direktive "SuperStrict", das hilft ungemein sauberen Quelltext zu erzeugen und hilft Dir Dich jederzeit in Deinem Quelltext zurecht zu finden. Außerdem hast Du dann den Vorteil dass Dein Programm speichersparender und schneller läuft.
  • local rocket:TRocket[5] funktioniert zwar, bringt den GC aber ins Schwitzen. Besser ist es die Erzeugung in eine weitere Klasse zu packen, das Array leer zu deklarieren und dann per "New" Operator zu definieren ...
  • ...noch besser ist es das alles in eine LinkedList zu packen

Code: [AUSKLAPPEN]

SuperStrict

Type TRocket
   Global _list:TList
   
   Field x:Int
   Field y:Int
   
   Function Add:TRocket(x:Int, y:Int)
      Local rocket:TRocket = New TRocket
      
      If rocket._list = Null Then rocket._list = New TList
      rocket._list.AddLast(rocket)
      
      rocket.x   = x
      rocket.y   = y
      
      Return rocket
   End Function
End Type

Local rocket:TRocket = TRocket.Add(100,100)
Farbfinsternis.tv
 

HamsDa

BeitragMo, Jul 17, 2006 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
ganz ehrlich: jez haste mich verwirrt Oo
ich glaub, ich muss mir das hier erst mal eingehend durchlesen Oo

noch ne frage:
gibz schon ne neuere Version von BlitzMax als die v1.09?
BlitzMax zählt nämlich SuperStrict nicht als reserviertes wort.
Dann muss ich wohl mal saugn gehn Very Happy

BladeRunner

Moderator

BeitragMo, Jul 17, 2006 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
HamsDa hat Folgendes geschrieben:
gibz schon ne neuere Version von BlitzMax als die v1.09?
BlitzMax zählt nämlich SuperStrict nicht als reserviertes wort.
Dann muss ich wohl mal saugn gehn Very Happy


Jop, die gibt es, für alle die Bmax bezahlt haben. 1.20 wäre das denn. Mit saugen ist da nichts, vorallem da es illegal ist und man sich so die Hilfe hier verscherzt...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

BtbN

BeitragMo, Jul 17, 2006 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich mich recht entsinne, ist 1.09 immernoch die Version die ShareIt! in seinen Mails versendet.
Und als BMax neuling muss man nicht unbeding wissen, dass es ne aktuellere Version gibt.
Kann also gut sein, dass ers doch legal hat. Wenn nicht: Pfui, schäm dich Wink

BladeRunner

Moderator

BeitragMo, Jul 17, 2006 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Mag sein dass ich etwas vorschnell war. Wenn ja verzeihe man mir.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Dreamora

BeitragDi, Jul 18, 2006 7:20
Antworten mit Zitat
Benutzer-Profile anzeigen
BORNtobeNAMELESS hat Folgendes geschrieben:
Wenn ich mich recht entsinne, ist 1.09 immernoch die Version die ShareIt! in seinen Mails versendet.
Und als BMax neuling muss man nicht unbeding wissen, dass es ne aktuellere Version gibt.


Gebe ich dir zwar recht, jedoch sagt die Mail auch ziemlich eindeutig wo man sich registrieren muss. Und dort ist seit über 3 Monaten auch wieder direkt das Update zu finden. (früher wars in den Boards, da wars noch ein bisschen was anderes)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

HamsDa

BeitragMi, Jul 19, 2006 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
k, also...
hab das mit den Types mal versucht, auf die einfacher art und weise(nix gegen deinen vorschlag, farbfinsternis, ich versteh's nur einfach nich =().
sieht bei mir jetzt so aus:
(war nur mal versuchsweise, ob das jetzt funktioniert, oder nicht)

Code: [AUSKLAPPEN]

SuperStrict

Type TRocket
  Field x:Int
EndType

Local rocket TRocket[5]
Local i:Int = 0

For i = o To 4 Step 1
  rocket[i].x = i
  Print rocket[i].x
Next


Dann gibt der Compiler an der Zeile "rocket[i].x = i" den Fehler
"Unhandled Exception: Attempt to access field or method of Null object" aus.

Normalerweise hab ich ja alles richtig gemacht, oder?
Hat jemand ne Idee, was ich falsch gemacht hab?

Farbfinsternis

BeitragMi, Jul 19, 2006 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Das passiert weil Du dem Compiler zwar gesagt hast dass Du irgendwann mal 5 Raketen haben willst, diese Raketen aber niemals "gebaut" hast:

Code: [AUSKLAPPEN]

Type TRocket
  Field x:Int
EndType

Local rocket:TRocket[5]
Local i:Int = 0

For i = 0 To 4
  rocket:TRocket[i] = New TRocket   ' immer erst "bauen", dann "abschießen"
  rocket.x = i
Next
Farbfinsternis.tv
 

HamsDa

BeitragMi, Jul 19, 2006 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
danke sehr für die hilfe ^^

nun ma n lob: ihr seid ebenso schnell, wie hilfreich ^^

danke nochmals an alle, die was gepostet ham!

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group