Optimierung der Klasse?
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
KlipBetreff: Optimierung der Klasse? |
Do, Nov 03, 2005 22:31 Antworten mit Zitat |
|
---|---|---|
Hallöle,
ich habe mich gestern und heute ein wenig mit OOP auseinandergesetzt und ein kleines Programm gebastelt, in dem sinnlos einige Bälle rumfliegen und von der Wand abtitschen. Ich wüsste gerne, wie man den Code noch verbessern/kürzen kann. BlitzMax: [AUSKLAPPEN]
Da habe ich jetzt die "Gegner" erstellt. So lasse ich sie dann in der Hauptschleife in der Gegend rumfliegen: BlitzMax: [AUSKLAPPEN]
Wie kann ich den Code nun verbessern? |
||
Jolinah |
Do, Nov 03, 2005 22:41 Antworten mit Zitat |
|
---|---|---|
Sieht eigentlich gut aus. Finde da muss nichts optimiert oder verkürzt werden Du könntest höchstens die Liste noch in den Type einbauen, was aber nicht wirklich eine Rolle spielt. | ||
regaa |
Do, Nov 03, 2005 23:22 Antworten mit Zitat |
|
---|---|---|
Jolinah hat Folgendes geschrieben: Finde da muss nichts optimiert oder verkürzt werden Du könntest höchstens die Liste noch in den Type einbauen...
Jup. BlitzBasic: [AUSKLAPPEN] |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
klepto2 |
Fr, Nov 04, 2005 9:35 Antworten mit Zitat |
|
---|---|---|
Man könnte noch die Create Funktion mit in den Type einbauen.
Code: [AUSKLAPPEN] Type enemy ..... Global enemy_list ...... Method New() if enemy_list=null then enemy_list=new TList enemy_list.addlast(self) End Method Function Create(_amount) For local a:Int = 0 to _amount -1 local e:enemy = New enemy next End Function ....... End Type |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
Klip |
Fr, Nov 04, 2005 12:03 Antworten mit Zitat |
|
---|---|---|
BlitzMax: [AUSKLAPPEN]
Die Funktion funktioniert, danke soweit schonmal. Stimmt, ist viel einfacher so. Nur habe ich noch ein Problem, und zwar bei der Methode von regaa. Wenn ich die Methode New() vor der Hauptschleife aufrufen will, meint er, der Identifier würde nicht stimmen. Aufruf mit: enemy.MakeList() ' Methode umbenannt btw. Der Inhalt ist derselbe wie bei regaa, habe nur meine Variablennamen angepasst. Das globale enemy_list habe ich ebenfalls in den Type eingefügt. EDIT: Was genau ist eigentlich der Unterschied zwischen Methode und Funktion? Die beiden machen ja rein technisch gesehen dasselbe, solange sie im Type stehen. Wann ist es sinnvoll, eine Funktion zu verwenden, wann eine Methode? |
||
Dreamora |
Fr, Nov 04, 2005 12:24 Antworten mit Zitat |
|
---|---|---|
Methoden existieren nur beim Objekt also wenn du ein objekt erzeugst nur mittels .methodenname
Funktionen hingegen existieren nur für den gesammten Type nicht für ein einzelnes Objekt, ihr Aufruf erfolgt deswegen über Typename.funktionsname Und was New () (als auch Delete ()) betrifft: Das sind ganz besondere Methoden, die von BM intern aufgerufen werden. New wird aufgerufen wenn du a:type = new type machst und ist der "Defaultconstructor". Hier rein kommt also alles was bei einer Erzeugung irgend eines Objektes dieses Typs notwendig ist (wie Werte festlegen, Arrays erzeugen etc) Delete wird automatisch von BM aufgerufen wenn ein Objekt bei Flushmem als "nicht mehr gebraucht" erkannt und entsorgt wird. Dort rein kommt alles, was aufgerufen werden müssen um eventuell verbleibende Rückstände des Objektes zu entsorgen (wie Referenzen von anderen Objekten auf dieses etc) Für weitere Erklärungen besuchst du am besten die Tutorials & FAQ Sektion. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Nemesis |
Fr, Nov 04, 2005 17:51 Antworten mit Zitat |
|
---|---|---|
Zitat: Delete wird automatisch von BM aufgerufen wenn ein Objekt bei Flushmem als "nicht mehr gebraucht" erkannt und entsorgt wird. Dort rein kommt alles, was aufgerufen werden müssen um eventuell verbleibende Rückstände des Objektes zu entsorgen (wie Referenzen von anderen Objekten auf dieses etc) solange referenzen auf dieses objekt vorhanden sind sollte flushmem das objekt doch garnicht entsorgen -> delete nicht aufgerufen werden. |
||
bruZard |
Fr, Nov 04, 2005 18:14 Antworten mit Zitat |
|
---|---|---|
Da hast Du Begrifflichkeiten verwechselt: Ein Objekt wird niemals vom Garbage Collector entsorgt ... erst beim End ... eine Referenz wird aber schon durch ein Delete() ins Nirvana geschcikt wenn es nicht mehr verlinkt ist.
Das Type ansich ist das Objekt ... es kann nicht entsorgt werden da es keinen Speicher verbraucht ... erst eine Referenz macht ein Objekt existent. |
||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
Nemesis |
Fr, Nov 04, 2005 20:49 Antworten mit Zitat |
|
---|---|---|
naja also meiner meinung nach ist ein objekt eine instanz und ich glaube dreamora hat das auch so gemeint.
Eine referenz ist im grunde nur ein (typesicherer) pointer auf eine instanz/objekt und es kann auch mehrere referenzen auf eine instanz/objekt geben. Existiert auf eine instanz/objekt keine referenz mehr wird es vom garbagecollector gelöscht. |
||
Jolinah |
Fr, Nov 04, 2005 20:53 Antworten mit Zitat |
|
---|---|---|
Ich dachte ein Objekt ist eine Instanz einer Klasse und nicht die Klasse selber?
Edit: zu spät |
||
- Zuletzt bearbeitet von Jolinah am Sa, Nov 05, 2005 1:11, insgesamt 2-mal bearbeitet
Dreamora |
Fr, Nov 04, 2005 21:56 Antworten mit Zitat |
|
---|---|---|
Genau so ist es. Ein Objekt ist eine Runtime Instanz einer Klasse.
Und eine Klasse ist eine Beschreibung/Bauplan für Objekte. -> Klasse ist ein "Blueprint" also Bauplan für eine bestimmte Sache (zB ein Auto), während ein Objekt die entsprechende Sache selbst ist (also das Auto), um es mit einem hoffentlich verständlichen "Reallife" Beispiel zu erklären. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group