Frage zu Types in Blitzmax
Übersicht

Gehe zu Seite Zurück 1, 2, 3 Weiter
LucySalz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nein, die 9 war einfach nur so, hätte auch 56 sein können ^^
also muss ich Local saurier:TMonster[50] angeben, wenn ich 50 saurier will? und dann spreche ich sie an? könnte man mir ein beispiel zeigen (proggen) wo ich ca 3 saurier habe, die ich dann als drawrect ausgebe, und zb über die tasten 1,2,3 deren werte erhöhen kann? also zb ich drücke auf 1, dann wird kreis[1] um 1 breiter oder so.... somit könnte ich im zusammenhang lernen, wenn es zu viel ist , wäre es auch ok, es wäre nur für mein verständnis.... es ist echt schwer in types reinzukommen ^^ |
||
Lars Kammer |
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein paar Methoden zum Ansprechen von Types:
1. Die einfache Variable BlitzMax: [AUSKLAPPEN] Local meinsaurier:TMonster = New TMonster Dies ist die einfachste Methode, und auch die Beschränkteste. Sie eignet sich für einzelne Instanzen, von welchen du immer wissen willst dass du sie jetzt gerade ansprichst, z.B. den Spieler. 2. Das Array BlitzMax: [AUSKLAPPEN] Local meinesaurier:TMonster[10] Arrays eignen sich zum ansprechen einer bekannten Anzahl an Objekt-Instanzen, bei welcher man immer wissen will welche Instanz man gerade anspricht oder jede einzeln ansprechen will. Die Linked List BlitzMax: [AUSKLAPPEN] Local meinesaurier:TList = New TList DIe Linked List eignet sich für eine unbekannte oder sich verändernde Anzahl an Objekt-Instanzen, welche man zwar jede einzeln ansprechen möchte, aber nicht unbedingt jede im speziellen anders ansprechen möchte. Es ist die komplexeste, aber flexibelste Methode die es gibt. EDIT: Zum erhöhen eines Wertes brauchst du ein Feld innerhalb des Objekts, welches du erhöhst. Das Objekt selber kannst du nicht "erhöhen". Ein Objekt ist nur ein Container (Behälter) für Variablen, Konstanten, Methoden und Funktionen, welche zu diesem Objekt gehören. |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Propellator hat Folgendes geschrieben: Arrays eignen sich zum ansprechen einer bekannten Anzahl an Objekt-Instanzen, ...
Nö, bekanntermaßen sind Arrays beliebig erweiterbar, z.B. so: BlitzMax: [AUSKLAPPEN] Graphics 800,600 |
||
LucySalz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke an alle, ich schau mir alles mal an, blitzmoritz dein code ist echt gut, ich schau mir mal das an, dann kann ich selber mal sowas machen.
Dieser Thread ist ein vorzeige beispiel für all die anfänger, denen types auch schwer fallen. ich denke es eignet sich gut in der tutorial sektion ^^ alle sind wirklich gut, habt ihr gute arbeit geleistet, danke ^^ |
||
Lars Kammer |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich möchte zu BlitzMoritz' Code hinzufügen:
Die Len-Funktion assoziiere ich persönlich eher mit Strings. Eine Polymorphie mit Arrays war mir unbekannt, doch bleibt zu erwähnen, dass man das Gleiche wahrscheinlich schneller unter der Eigenschaft Array.length ermitteln kann. ZEVS |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMoritz hat Folgendes geschrieben: Nö
Ich möchte der Vollständigkeit halber noch anfügen, dass die Aussage von Propellator, Zitat: Arrays eignen sich zum ansprechen einer bekannten Anzahl an Objekt-Instanzen keinerlei Mängel aufweist. Nicht, dass BlitzMoritz' Nö hier irgendjemanden (generell Neulinge) verwirrt. Ja, es ist richtig, dass man Arrays ganz einfach dynamisch verändern kann. Und BlitzMoritz' Zusatz sollte nicht vergessen gehen. Aber die Umkehrung von Propellators Aussage, die lauten würde: "Zum Ansprechen (oder Speichern) einer bekannten Anzahl an Objekt-Instanzen eignen sich Arrays", trifft dafür umso mehr zu.
|
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMoritz:
Wunderbar, du weisst wie man Slices benutzt. Nur, was passiert wenn du ein Objekt löschst? in einer Linked List kein Problem, wenn du es aus der Liste nimmst, wird einfach die Abhängigkeit eines Links geändert. Bei einem Array kannst du die einzelnen Einträge zwar über einen Index ansprechen, darfst aber beim Löschen auch alle wieder neu anordnen. Ich würde Keinem anraten, etwas wie Schüsse mit Arrays + Slices zu erledigen, genau aus diesem Grund. ZEVS: Performance in diesem Bereich spielt meistens keine Rolle. |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
LucySalz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich glaube das beispiel mit blitzmoritz verwirrt mich nochmehr ![]() ![]() ![]() dabei verstehe ich folgendes nicht: 1. den befehl Len in diesem codezusammenhang 2. warum ich das nicht einfach machen kann: If MouseHit(1) Then test[i] = i + 1 End If 3. point = point[.. Len(point)+2] .... was bedeutet das: .. ? 4. die logik verstehe ich nicht, obwohl das programm perfekt ist..... ich raff das nicht... sorry ![]() ![]() |
||
Lars Kammer |
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
@LucySalz: Mit Len(array) bekommst du die "Länge" heraus, also wieviele Einträge dein Array hat, falls du das nicht irgendwie anders gezählt haben solltest. Aber Achtung: die Indizes gehen nur von 0 bis Len(array)-1.
Bei array = array[.. n] musst du nicht viel verstehen, die Schreibweise bedeutet lediglich, dass du das vorhandene Array auf insgesamt n Einträge veränderst. Und array[.. Len(array)+2] bedeutet eben zwei Einträge mehr als vorher. Entfernen kannst du einen einzelnen Beitrag natürlich auch, es gibt dafür nur keinen simplen "Remove"-Befehl, du müsstest es in einer kleinen Schleife selbst besorgen, was aber kein Ding ist. Im folgenden erweiterten Beispiel habe ich dir dafür die Function "ArrayRemove" geschrieben, mit der du einzelne Punkte wieder entfernen kannst, wenn du d'raufklickst: BlitzMax: [AUSKLAPPEN] Graphics 800,600 Du musst dir eben die Frage stellen, ob je nach deinem Anwendungsbedarf das gezielte Ansprechen einzelner Indizes diesen kleinen Umweg beim Entfernen rechtfertigt oder nicht. Mein Beispiel könntest du natürlich auch genauso mit Listen machen, ich selbst mag Listen sehr, aber du solltest aus irgendwelchem voraus Gesagtem nicht behalten, Arrays könne man nicht dynamisch behandeln. Edit: Hier, zum Vergleich für dich, das Ganze in einer Liste, vielleicht ist dir das angenehmer: BlitzMax: [AUSKLAPPEN] Graphics 800,600 |
||
LucySalz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mit TList ist es wirklich angenehmer, die arrays machen mich nur aggressiv.... ich raff die einfach nicht... irgendwie bin ich nen schlechter programmierer.... zu dumm arrays zu verstehen... types gehen... aber arrays nicht... schade.... | ||
Lars Kammer |
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Arrays sind eigentlich recht einfach. Und die Tatsache, dass du sie nicht sofort verstehst ist nicht weiter schlimm und heißt nicht, dass du ein schlechter Programmierer bist. Du fängst halt gerade erst an.
Und wenn du die Types wirklich verstehst (auch wenn du dir wohl noch nicht den gesamten Funktionsumfang von denen klar gemacht hast), ist das schon mal echt gut ![]() ![]() |
||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
LucySalz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke für die aufbauenden worte ![]() die types kenn ich noch von blitzbasic3d, da habe ich die in einem kleinerem umfang genutzt.... Ein sehr guter freund sagt immer, dass arrays sehr wichtig sind und man muss sie beherrschen.... naja mal sehen, lern ich auch noch ![]() ![]() ![]() Ps. ich warte gerade auf mein buch, Game Programming for Teens 3. Auflage, sollte heute oder morgen kommen, hoffe, dass ich eine gute Wahl getroffen habe?! oder gibt es noch Empfehlungen? ![]() |
||
Lars Kammer |
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
LucySalz hat Folgendes geschrieben: mit TList ist es wirklich angenehmer, die arrays machen mich nur aggressiv.... ![]() |
||
LucySalz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wie schon gesagt wurde, ich verstehe die types zwar, habe sie aber bestimmt noch nicht sie in voller bandbreite verstanden ^^
ich kenn es noch von blitz3d: typ erstellen, nutzen und fertig.... blitzmax ist da etwas "unfreundlicher" ![]() |
||
Lars Kammer |
![]() |
klin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es kommt darauf an, wie man diese gelernt hat. Wenn man z.B. zuerst von BB gelernt hat und schon daran gewöhnt ist, ist alles "unfreundlicher". Dafür kann man mit Bmax Types viel mehr anstellen wie bei den BB Types.
BlitzMax ist eben eine höhere Ebene als BB. Daran muss man sich gewöhnen. Also fang lieber mal nicht mit Monkey an ^^. Das ist nämlich richtig C++ like ![]() Klin |
||
LucySalz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wenn wir schonmal in dieser runde sind, und es erwähnt wird... was ist eigentlich monkey genau?`??? was kann ich damit machen, wie kann ich es machen... und warum? ![]() ![]() |
||
Lars Kammer |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMoritz hat Folgendes geschrieben: Das Gefühl, nicht indiziert auf einzelne Listeneinträge zugreifen zu können, war mir irgendwie unangenehm.
TList.ValueAtIndex ist zwar langsam, aber wirkungsvoll. Zitat: Was ist Monkey?
Ich bin kein Experte, besitze Monkey nicht, schaue aber mit offenen Augen durch dieses Portal. Monkey ermöglicht programmieren für viele sog. Targets, die IPhone, Andriod, Windows Phone, Flash, HTML5-Canvases und weitere beinhalten. Damit ist Monkey der kleinste gemeinsame Nenner von Objective C (IPhone), Java (Android), Action Script (Flash), JavaScript (HTML 5) und kompillierten Binärcode. Mit anderen Worten: Monkey kann fast nichts. Somit muss man (soweit ich es mitbekomme) das Programm den einzelnen Targets anpassen. Zitat: Wie kann ich mit Monkey programmieren?
So wie mit BlitzMax, nur halt schwieriger. Zitat: warum
Es ist schon toll, ein Programm praktisch überall zum Laufen zu kriegen. Im Idealfall beschränken sich die Entwicklungskosten (Zeit ist Geld) zum Programmieren für die einzelnen Targets auf die Entwicklungskosten eines einzelnen, nur halt, dass man eine größere Zielgruppe hat. Wenn man das Programm verkaufen will, eröffnet sich der normale PC-Markt, IPhone, Andoid und Windows-Phone - Markt und man kann Demos in Flash oder HTML5 anbieten, die man mit jedem Browser zum Laufen kriegt. Zu TList/Array: TList ist ein klares Anwendungsgebiet von gleichberechtigten Objekten in beliebiger Menge und kommen den BB-Type ![]() ![]() Man sollte aber auch nie eine hierarchische Type-Struktur aus den Augen verlieren... ZEVS |
||
LucySalz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke ZEVS ![]() @klin BlitzMax: [AUSKLAPPEN] SuperStrict hab da mal 3 fragen: 1. DrawText SaurierListe.Count(), 90, 90 bei dem zählt er unendlich weiter, obwohl ich nur testweise 10 new einträge erstelle??? 2. wie kann ich jetzt zb: saurier(5) ansprechen 3. wie kann ich zb saurier(5) mit werten versehen und sie dann per zb. Drawtextbefehl ausgeben? die fragen scheinen sich zu wiederholen, doch brauche ich antworten zu den gegebenen beispielen, so lerne ich.... sorry wenn ich nerve, ich raff es eben noch nicht ganz ^^ |
||
Lars Kammer |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: 1. DrawText SaurierListe.Count(), 90, 90 bei dem zählt er unendlich weiter, obwohl ich nur testweise 10 new einträge erstelle??? Erstelle sie vor der Hauptschleife, nicht darin.
Zitat: wie kann ich jetzt zb: saurier(5) ansprechen Es gibt im Prinzip keinen saurier(5), aber:
BlitzMax: [AUSKLAPPEN] Local Saurier5:TMonster = TMonster(SaurierListe.ValueAtIndex(5)) SaurierListe - Das ist die Liste (TList Objekt) ValueAtIndex(5) - Das ist die Methode, die dir mit dem Paramter den 5 Eintrag gibt. Das Allgemeine Object, das du erhältst, castest du mit TMonster(...) in das richtige Zielobjekt. Die Variable Saurier5 kannst du dann behandeln, wie du willst. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Xeres hat Folgendes geschrieben: Zitat: wie kann ich jetzt zb: saurier(5) ansprechen Es gibt im Prinzip keinen saurier(5), aber:
BlitzMax: [AUSKLAPPEN] Local Saurier5:TMonster = TMonster(SaurierListe.ValueAtIndex(5)) SaurierListe - Das ist die Liste (TList Objekt) ValueAtIndex(5) - Das ist die Methode, die dir mit dem Paramter den 5 Eintrag gibt. Das Allgemeine Object, das du erhältst, castest du mit TMonster(...) in das richtige Zielobjekt. Die Variable Saurier5 kannst du dann behandeln, wie du willst. Ich empfehle hier jedoch, den Sauriern ein Field ID% zu geben, was du dann beim erstellen mit entsprechendem Wert füllst. So kannst du später dann immer denselben Saurier raussuchen, da sich die Auflistung in der Liste verändern kann und du mit einem mal einen anderen Saurier hast ![]() Vorrausgesetzt natürlich, dass du die ID einmalig verteilst. |
||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
Gehe zu Seite Zurück 1, 2, 3 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group