Varptr und übergabe dieser
Übersicht

PhillipKBetreff: Varptr und übergabe dieser |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo zusammen ![]() Ich arbeite mich grade durch meine Lernstrecke, die ich mir auferlegt habe und versuche, ein workarround für ein anderes problem zu schreiben. Da ich direkt auf ein 'bild' malen möchte, schreibe ich mir grade testweise DrawRect() etc für pixmaps um. Dirty, aber immerhin funktioniert das. Damit an sich habe ich kein problem, nur mit den verflixten pointern. GetColor() akzeptiert meine variablen nicht, egal wie ich es schreibe. Ich schreibe grundsätzlich im superstrict, da kam es schon ein ums andere mal zu problemen, da die ganzen Beispiele etc aus der Hilfe grundsätzlich ohne sind. Hier meine frage also: WIE zur hölle gibt man Getcolor() nun seine gewünschten 3 parameter? Im grunde schreibe ich es etwa so: BlitzMax: [AUSKLAPPEN] Local r:Byte = 0 Das sollte eigentlich hinhauen. Allerdings habe ich nie wirklich die handhabung von Ptr begriffen. Es hat nur immer irgendwie durch rumprobieren geklappt. Das kanns nichtmehr sein, ich möchte lernen^^ Entweder meckert Bmax über falsche deklaration, das er eine Variable möchte oder über "Variable for 'Var' parameter is not of matching type" Was ich weiß: Pointer sind im grunde Zeiger auf speicheradressen und können wie arrays behandelt werden. Varptr übergibt statt dem inhalt einer Variable einen Ptr auf eben diese. Aber was verflixt nochmal ist 'Var', was GetColor() erwartet? Für mich klingt es wie das gegenstück zu pointern. Bzw ich gebe damit an, das ich eine Variable(speicheradresse) bekomme und keinen Wert für eine neue variable. hilfe ![]() Gruß, Phillipk |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Var am Schluss bedeutet lediglich, das BlitzMax selbst als Parameter die Pointer der Variablen übergibt, damit diese, wenn sie in der Funktion gändert werden auch im Aufruf-Bereich geändert werden.
Das heißt schreibst das: BlitzMax: [AUSKLAPPEN] GetColor(r, g, b)
Den Rest macht BlitzMax. MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Zusatz "Ptr" ist übrigens das Gegenstück zu "Varptr".
-> "Byte Ptr"/"Double Ptr Ptr" für entsprechende Speicherbereiche. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht ist das ja OffTopic für dich, aber es gibt eine ganz einfache Möglichkeit, mit sämtlichen Zeichenbefehlen von BlitzMax ein Bild zu bearbeiten.
Da ja der BlitzMax-Backscreen erst dann zu sehen ist, wenn das FLIP im code erscheint, kannst du jedes Bild direkt auf der Canvas von BlitzMax bearbeiten. Ich mach dies meist beim Programmstart, habe aber auch viele Programme, wo ich das im laufenden Spielbetrieb hinbekomme. Der Ablauf ist ja normalerweise so: BlitzMax: [AUSKLAPPEN] Repeat und wenn es was zu manipulieren gibt: BlitzMax: [AUSKLAPPEN] Repeat Zwar dauert das Grabben etwas, aber meist überwiegen die Vorteile durch das Malen auf der Canvas Derzeit erzeuge ich in meinem neuesten Projekt 400 Vorschaubilder (340x80pix auf diese Art und Weise. Alle 30msec wird eines gezeichnet. Dazwischen wird die Kontrolle an das Spiel zurückgegeben. BlitzMax: [AUSKLAPPEN] Function ManipulierBild() 12 Sekunden nach Programmstart ist die Aktion vorbei. In der Zwischenzeit könnte der Spieler schon anfangen zu spielen, aber meist schaut man sich ja den Vorspann an, oder stellt noch an den Settings rum. So merken die User gar nichts von der Aktion. |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Midimaster,
die Draw/Grab methode habe ich zur genüge ausgetestet und werde einfach nicht schlau draus, wie ich dies für mein vorhaben nutzen könnte. Ich versuche grade, eine Landschaft in 64x64 einzelbilder zu zerlegen, nachzulesen in diesem thread von mir. Da ich eine Landschaftsgröße anpeile, die größer wie die die Bildschirm breite/höhe ist, kann ich anscheinend keine Drawoperationen von Blitzmax verwenden. Auch die 64x64 bildchen einzeln zeichnen und grabben will nicht so wirklich. Daher mein umweg über die Pixmap methode, indem ich kleine teile der Draw Methoden von Bmax umschreibe auf ein TPixmap.WritePixel() system. Zugegeben, das ist mehr wie nur dreckig, aber ich bin mit meinem Latein am ende ![]() Zu den Pointern: Ich fass es nicht. Ich. Fass. Es. Nicht. Etwa eine halbe stunde habe ich mich an diesen dämlichen Pointern versucht, und ich muss einfach garnichts Deklarieren? Das sollte eventuell in den docs vermerkt werden :/ Oder eine entsprechende Superstrict variante eingefügt werden, das hätte mir schon so manchen ärger erspart V.V |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Variablenreferenzen sind etwas leicht anderes im Vergleich zu Pointern.
Bei denen geht gerade darum, dass man extern liegende Variablen in einer Funktion ändern kann, ohne explizit Pointer zu erstellen. (ohne Var: eingehender Wert, mit Var: ein- und ausgehender Wert) In der Dokumentation fehlt in der Tat viel. ("%"=":Int" ist bekannt, aber von "@"=":Byte" bzw. "@@"=":Short" steht dort nichts.) Trotzdem muss man dann nicht gleich ein Feature, das einem die Arbeit erleichert, entfernen. ![]() mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Von entfernen habe ich nichts gesagt ![]() Ich habe lediglich anmerken wollen, das ich aufgrund der Hilfe nicht zu einer Lösung kam, da dort alles ohne strict und Superstrict geschrieben ist. Mir fehlen dort vierlei anhaltspunkte, was jetzt eigentlich für ein Datentyp vorliegt ^^ Nagut, das nächste mal werde ich wohl noch etwas banaler rumtesten. zugegeben, ich programmiere nun von anfang an in Superstrict, das finde ich einfach sauberer. Darum wäre ich nie auf die Idee gekommen, eine funktion mit nichtexistenten variablen aufzurufen ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group