Erste Gehversuche mit BMax.
Übersicht

![]() |
SmilyBetreff: Erste Gehversuche mit BMax. |
![]() Antworten mit Zitat ![]() |
---|---|---|
Soo ich hab mich heute mal an blitzmax herangetraut.
Folgendes kam bei den ersten spielerrein raus. Die Meisten Fragen konnte ich mir selbst mit Try&Error bzw mit der Hilfe lösen. Aber einwas blieb mir schleierhaft: Wieso werden die objecte nicht gelöcht, wenn e auf 0 ist? btw: Sollte es ein paar "grobe Fahrlässigkeiten" an meinem Programmierstil geben bitte ich auch darrauf hinzuweisen. Wie schon gesagt ist das mein erster Gehversuch, und ich habe ehrlich gesagt keinen plan, wie man bei OOP ein Programm richtig Strukturiert. Ich habe mich hier einfach auf meinen Bauch verlassen ![]() Code: [AUSKLAPPEN] Strict
Type spark Field x:Float Field y:Float Field e:Int Field ri:Int Field s:Float Field gr:Float Field R, G, B Global list:Tlist = CreateList() Method New() Repeat r = Rand(0,1) * 255 g = Rand(0,1) * 255 b = Rand(0,1) * 255 Until r+g+b x = MouseX() y = MouseY() e = 100 ri = Rand(0,360) s = Rnd(0,4) List.AddLast(Self) End Method Method del() Local obj:TLink obj = list.findlink(Self) list.remove(obj) End Method Method update() e = e - 3 SetColor r,g,b SetAlpha e/100.0 DrawOval x-4,y-4,8,8 x = x + Sin(ri)*s y = y + Cos(ri)*s + gr gr = gr + 0.1 If e <= 0 del() End Method End Type Graphics 800,600 Local a:spark Local count:Int SetBlend alphablend Repeat Cls For a:spark = EachIn(spark.list) a.update Next If MouseHit(1) Or MouseDown(2) New spark If MouseHit(3) For count = 0 To 999 New spark Next End If Flip Until KeyHit(27) |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1.
Code: [AUSKLAPPEN] Method del() Local obj:TLink obj = list.findlink(Self) list.remove(obj) End Method sollte sein Code: [AUSKLAPPEN] Method del()
Local obj:TLink obj = list.findlink(Self) obj.remove() End Method oder Code: [AUSKLAPPEN] Method del()
list.remove(Self) End Method macht keinen sinn zu suchen und dann nochmal zu suchen. Am besten machst du aber in die Klasse selbst ein field link:TLink und dann beim New link = List.AddLast(self) dann kannst du in Del einfach link.remove() ohne überhaupt suchen zu müssen. Ansonsten hats bei mir keine Probleme, es wird alles sauber entsorgt. Hier der gesamte Source: Code: [AUSKLAPPEN] Strict
Type spark Global list:TList = CreateList() Field link:TLink Field x:Float Field y:Float Field e:Int Field ri:Int Field s:Float Field gr:Float Field R, G, B Method New() Repeat r = Rand(0,1) * 255 g = Rand(0,1) * 255 b = Rand(0,1) * 255 Until r+g+b x = MouseX() y = MouseY() e = 100 ri = Rand(0,360) s = Rnd(0,4) link = List.AddLast(Self) End Method Method del() link.remove() End Method Method update() e = e - 3 SetColor r,g,b SetAlpha e/100.0 DrawOval x-4,y-4,8,8 x = x + Sin(ri)*s y = y + Cos(ri)*s + gr gr = gr + 0.1 If e <= 0 del() End Method End Type Graphics 800,600 Local count:Int SetBlend alphablend Repeat Cls For Local a:spark = EachIn(spark.list) a.update Next If MouseHit(1) Or MouseDown(2) New spark If MouseHit(3) For count = 0 To 999 New spark Next End If SetColor 255,255,255 SetAlpha 1 DrawText "Count: " + spark.list.count(), 0, 0 Flip Until KeyHit(27) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Type spark
... 'Instanz aus Liste entfernen Method del() Spark.List.Remove(Self) Spark.Terminate (Self) End Method 'Instanz löschen Function Terminate (obj:spark) obj = null End Function ... End Type Sei bitte ein lieber Smily0412 und benenne deine Types mit einem T vorne (z.B. TSpark), das hilft uns anderen deinen Code besser zu verstehen. ![]() Oder eben die Method del() so wie Dreamora es vorschlug. @Dreamora, die Probleme die er hat, kommen bei manchmal auch vor, deswegen Nulle ich die Instanz lieber gleich noch mal. Auch wenn es theoretisch nichts bringt. cheers |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sorry d-bug aber dein Terminate ist total wertlos.
Du gibst eine Objektreferenz in eine Funktion und setzt sie drin Null. Das ist total sinnfrei denn ausserhalb der Funktion ändert sich an der Referenz nix. Hinzu kommt dass sie sowieso nur in der Liste gespeichert ist und deswegen mit dem Remove schon genullt ist. wenn du noch probleme damit hast, dass das nicht geschieht hast du vermutlich nicht 1.24 mit SyncMod denn es gab früher einen Bug in TList speziell wenn man die Liste selbst nullte, welche verhinderte das die Objekte drin freigegeben wurden. Aber hast recht, einen Fehler hat meinen Code. In Del muss noch etwas zusätzlich rein und zwar: link.remove() link = NULL Dann wirds korrekt freigegeben, sonst hält der Link das Objekt am leben. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group