Type Problem
Übersicht

Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hay. Leider bin ich auch einer der sorte die mit den Types unter BMax nicht zurecht kommen.
Habe mal das Beispiel aufgegriffen und verstehe nicht warum die Einträge nicht weniger werden wenn ich ein Eintrag auf null setze. Code: [AUSKLAPPEN] Graphics 800,600,0 SetBlend ALPHABLEND Type objekt Global list:TList = New TList Field objekt_x# Field objekt_y# EndType For N=0 To 100 info:objekt = New objekt info.objekt_x = Rand(0,800) info.objekt_y =Rand(0,600) ListAddLast objekt.list, info Next Repeat Cls SetAlpha 0.4 For i:objekt = EachIn objekt.list i.objekt_y = i.objekt_y + 1 DrawRect i.objekt_x, i.objekt_y, 5, 5 If i.objekt_y>590 Then ListRemove(objekt.list,i:objekt) 'Löscht den Eintrag aus der Liste i:objekt=Null 'Löscht den Eintrag End If Next SetAlpha 1 DrawText CountList(objekt.list),10,10 Flip Until KeyHit (KEY_ESCAPE) End Hoffe mir kann jemand helfen bei diesem Problem. Gibt es vieleicht auch eine möglichkeit eine Bestimmte schneefllocke anzusprechen. Also ein Handle. (BB) (Edit: Wurde verbessert) |
||
- Zuletzt bearbeitet von Matthias am Di, Sep 25, 2007 14:20, insgesamt einmal bearbeitet
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau Dir bitte nochmal die Beispiele auf der ersten Seite an, dann sollte das klar werden. Du setzt zwar den Inhalt des Objektes auf Null (und wenn es in einer Variablen gespeichert wäre würde der Garbage Collector das auch brav entsorgen), aber Du lässt den Verweis auf das genullte Objekt als Eintrag in der Liste.
Die Liste interessiert es nicht ob ein Eintrag Inhalt hat - er ist eingeschrieben also wird er gezählt. Listremove hilft hier. Sowieso möchte ich anraten wie ich verfahren bin die wichtigen Funktionalitäten im Type als Methoden zu verankern. Man kann new() ohne weiteres überladen, und ebenso eine destroy()-Methode implementieren welche das löschen von Objekten automatisiert. Wie es geht ist auf seite 1 dieses Threads zu sehen, mit ausführlichen Kommentaren. Eine bestimmte Schneeflocke ansprechen: Nur über Umwege, du könntest den Tlink der Flocke in der TList speichern. Allerdings sollte das nur selten nötig sein, denn der Sinn von Listen ist es ja grade größere Massen von Objekten gleich abzuarbeiten. Wenn Du nur einzelne bearbeiten willst solltest Du vielleicht überlegen ein Unterscheidungskriterium zu den anderen auszuarbeiten und anhand dem zu entscheiden wer bearbeitet wird ODER die 'besonderen' einfach in eine separate 2e Liste einzutragen. Darin liegt ein großer Teil der Macht von Bmax - im Gegensatz zu BB bestimmst Du selber was wo gespeichert wird. Mehr Macht, aber auch mehr Verantwortung. |
||
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 |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@BladeRunner
Danke für deinen Tipp. ListRemove ist genau der Befehl den ich suchte. Mh. Das mit dem Handles ist aber garnicht gut. Wie soll ich denn jetzt zb die Schneeflocke einen KristallTyp zuweisen. Also ich stelle mir das so vor das jede schneeflocke so gesprekelte Punkte hat das dann zb den KristallTyp darstellen soll. Code: [AUSKLAPPEN] Graphics 800,600,0 SetBlend ALPHABLEND Type objekt Global list:TList = New TList Field objekt_x# Field objekt_y# EndType For N=0 To 100 info:objekt = New objekt info.objekt_x = Rand(0,800) info.objekt_y =Rand(0,600) info.KristallTyp=Rand(0,19) ListAddLast objekt.list, info Next Type Kristall Field FarbR,FarbG,FarbB Field KPunkteX#[30] Field KPunkteY#[30] End Type For L=0 To 20 K:Kristall = New Kristall K.FarbR=Rand(100,255) K.FarbG=Rand(100,255) K.FarbB=Rand(100,255) For S=0 To 29 K.KPunkteX[S]=Rnd(-10,10) K.KPunkteY[S]=Rnd(-10,10) Next Next Repeat Cls SetAlpha 0.4 For i:objekt = EachIn objekt.list i.objekt_y = i.objekt_y + 1 DrawRect i.objekt_x, i.objekt_y, 5, 5 If i.objekt_y>590 Then ListRemove(objekt.list,i:objekt) 'Löscht den Eintrag aus der Liste i:objekt=Null 'Löscht den Eintrag End If Next SetAlpha 1 DrawText CountList(objekt.list),10,10 Flip Until KeyHit (KEY_ESCAPE) End Wie kann mann das den jetzt am besten verlinken?? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn jede Flocke sowieso alle genannten Eigenschaften hat, warum machst Du die Kristallfelder nicht teil des Flocken-Types ?
Und wenn es ein separater Type bleiben soll: Du kannst ja in objekt ein field k:Kristall machen, d.h. eine Typeinstanz zum Bestandteil des Types erklären. Also Code: [AUSKLAPPEN] type Bla
field blub:test end type type test field zomg:int end type local a:bla = new bla local b:test = new test b.zomg = 23 a.blub = test print a.blub.zomg |
||
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 |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mh. Stimmt. ![]() Das geht ja auch. Danke für deine Tips. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group