Deutsch
Forum

Dynamische Liste von Objekten=

 

Nico
Madysa
Ich hab mich mal darin versucht, das System zu überlisten um Klassenobjekte dynamisch aufzulisten. Mein Gedanke dabei war, dass ein einziges Objekt quasi als Lesekopf verwendet wird. Wird ein neues Objekt erzeugt, so wird seine Adresse in einem bereich aufgelistet. Will man dann darauf zugreifen, so wird die Adresse dem Lesekopfobjekt zugewiesen und dann können die gewünschten Operationen ausgeführt werden. Leider funktioniert das Ganze noch nicht so wirklich. Hat jemand (iF?) eine Idee, wie man die Idee weiterführen kann?
KompilierenMarkierenSeparieren
Class TPoint = x& , y&

proc TPoint.TPoint

    parameters ppx& , ppy&
    .x& = ppx&
    .y& = ppy&

endproc

declare Point# , Stack#
neuen Punkt in die Liste eintragen

proc NewPoint

    parameters px& , py&
    Hier wird der Punkt als Klasse ganz gewohnt erzeugt.
    Point# = New(TPoint,px&,py&)
    Hier ist der Trick: Damit der Punkt nicht verloren geht, wird seine
    Adresse in einer internen Liste (Stack#) gespeichert. Die Liste ist
    dynamisch, daher können theoretisch unendlich viele Punkte erzeugt werden.
    Dim Stack# , SizeOf(Stack#) + 4
    Long Stack# , (SizeOf(Stack#) - 4) = Point#

endproc

Bei allen folgenden Prozeduren wird zuerst die Adresse des gewünschten
Punktes auf das als Lesekopf dienende Objekt übertragen. Aus ihm können
dann alle gewünschten Informationen ausgelesen werden.

proc SetPointX

    parameters nr% , px&
    Point# = Long(Stack#,nr% * 4)
    Point#.x& = px&

endproc

proc SetPointY

    parameters nr% , py&
    Point# = Long(Stack#,nr% * 4)
    Point#.y& = py&

endproc

proc GetPointX

    parameters nr%
    Point# = Long(Stack#,nr% * 4)
    return Point#.x&

endproc

proc GetPointY

    parameters nr%
    Point# = Long(Stack#,nr% * 4)
    return Point#.y&

endproc

proc Draw

    parameters nr%
    Point# = Long(Stack#,nr% * 4)
    SetPixel Point#.x& , Point#.y& , 0

endproc

Auch hier nimmt das Lesekopfobjekt die Adresse des gewünschten Punktes an.
Dieser wird dispost und dann aus der Liste entfernt. Das Lesekopfobjekt wird
anschließend weiter verwendet.

proc DelPoint

    parameters nr%
    Point# = Long(Stack#,nr% * 4)
    Dispose Point#
    Char Stack# , (nr% * 4) = Char$(Stack#,(nr% * 4) + 4,SizeOf(Stack#) - (nr% * 4) - 4)
    Dim Stack# , SizeOf(Stack#) - 4

endproc

Hier werden der Reihe nach alle Punkte dispost und danach auch die Liste selbst.

proc ClearStack

    whileloop 0 , SizeOf(Stack#) , 4

        Point# = Long(Stack#,&loop)
        Dispose Point#

    EndWhile

    Dispose Stack#

endproc

Hauptprogramm
cls

whileloop 20,40

    NewPoint &loop,20

EndWhile

whileloop 0,20

    Draw &loop

EndWhile

ClearStack
waitinput
end

3 kB
Kurzbeschreibung: Dynamische Objektliste
Hochgeladen:03.07.2008
Ladeanzahl83
Herunterladen
 
Nico Madysa
03.07.2008  
 



Ich vermute hier liegt lediglich das Problem vor, dass Du Speicher in einer Funktion reservierst welcher nach Verlassen der Funktion freigegeben wurde. Du merkst Dir zwar global die Adresse, aber nicht den Inhalt.
 
03.07.2008  
 



Nachtrag: Reserviere doch Speicher wie ich es in der scrollarea.inc tue - per long m=globalAlloc(gPtr,_size) und kopiere den Klasseninhalt dort hinein. (Dadurch schliesst Du DIM aus, also keine automatische Speicherfreigabe nach Verlassen der Funktion.)

Für Objekteigenschaften sollte das funktionieren, wie sich das mit den Methoden verhält steht vlt. auf einem anderen Blatt.
 
03.07.2008  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

662 Betrachtungen

Unbenanntvor 0 min.
Ragnar Rehbein08.03.2013
Nico Madysa05.04.2011

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

iF (2x)
Nico Madysa (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie