[GELÖST] Drawimage Fehler?
Übersicht

CO2ehemals "SirMO"Betreff: [GELÖST] Drawimage Fehler? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Hab schon wieder ein Problem ![]() Also ich möchte 3 bilder auf den Bildschirm malen, jedes 32 x 32 px groß. Die Entsprechenden Koordinaten werden aus einem Definitions-File ausgelesen. Dieser enthält je x und y koordinate. Diese werden in einem Type gespeichert. Und dann in eine Liste gepackt. Nun lasse ich die bilder wie folgt malen: BlitzMax: [AUSKLAPPEN] Function update()"TBlock" ist der Type der das Bild speichern soll, "BlockList" ist die liste in der alle types gespeichert wurden "zaehler" ist eine kontrollvariable (um zu sehen, ob auch alle 3 blöcke in die liste eingetragen wurden) "Draw()" ist eine Methode des Typs "TBlock", dessen Code wie folgt aussieht: BlitzMax: [AUSKLAPPEN] Type TBlock Die Kontrollvariable ("zaehler") gibt die richtige zahl zurück: 3, d.h.: Die Definitionsdatei wurde richtig gelesen. woran kann es liegen, das trotzdem nur 1 Bild gemalt wird, obwohl ja offensichtlich alle 3 listeneinträge durchgegangen werden? Hier mal der Code, der in der Hauptschleife steht: BlitzMax: [AUSKLAPPEN] Flip 0 Ich hoffe ihr könnt mir helfen. EDIT: Und noch schnell ne Frage hinterher ![]() ![]() |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
- Zuletzt bearbeitet von CO2 am Di, Feb 14, 2012 21:44, insgesamt einmal bearbeitet
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Denk an die Zeichenreihenfolge!
BlitzMax: [AUSKLAPPEN] DrawImage(hp, 0, 0)bedeutet, dass du erst die Lebenspunktanzeige, dann das Schild, dann die Punkte und zuletzt das Hintergrundbild zeichnest. Und da das Hintergrundbild wahrscheinlich so groß ist, das es alle anderen vorher gezeichneten Bilder überdeckt, siehst du die anderen Bilder nicht mehr. Drehe also einfach mal deine Zeichenreihenfolge um. Nun zum Drehen von Bildern. SetRotation ist ganz richtig. Wenn ein Bild mit DrawImage gezeichnet wird, dann berechnet es die aktuell gesetzt Rotation mit ein. Willst du also ein Bild gedreht zeichnen, rufst du vorher SetRotation mit dem gewünschten Winkel auf, zeichnest das Bild mit DrawImage und setzt die Rotation wieder auf 0 mit SetRotation(0). Das gleiche gilt für SetColor, SetAlpha, etc. |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Trotz der geänderten zeichnen - Reihenfolge werden immernoch 2 von 3 Bildern nicht gemalt (aber zumindest die anzeigen für hp, score und shield sind wieder da ![]() Es wird immernur der letzte block gezeichnet... Woran könnte das liegen. Wegen dem SetRotation(): Erstmal danke, es funktioniert, kann man irgendwie den Drehpunkt ändern? Also es wird ja immer oben rechts gedreht, kann man das auch ändern, das es in der mitte gedreht wird? |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
MidHandleImage/SetImageHandle.
Zitat: BlitzMax: [AUSKLAPPEN]
Type TBlock Woher gibt es die Variable "block"? Zitat: BlitzMax: [AUSKLAPPEN]
Function update() Der Zähler wird nicht erhöht. Hast du wirklich deinen Code gepostet oder nur einen Teil, der keinen Fehler enthält. Im Zweifelsfall ist DebugLog dein Freund. ZEVS |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
"block" ist das Bild vom Block ![]() Zum dem sich nicht erhöhenden Zähler: ![]() |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für Bilder benutze ich immer AutoMidHandle(True), du kannst aber auch SetImageHandle für einzelne Bilder und SetHandle für alles, was kein Bild ist, verwenden.
Was das Zeichnen betrifft: Wurden die Werte richtig gelesen? Sind die Werte innerhalb des Bildschirms? Da gibt es ewig viele Möglichkeiten. Und die Liste & Funktion würde ich direkt in den Type verlagern, falls das nicht durch Kürzungen anders aussieht... |
||
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) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich kann immer nur raten, viel mehr mit Debugloging zu arbeiten. Bei BlitzMax genügt hier ein simpler...
BlitzMax: [AUSKLAPPEN] Print Self.PosX + " " + Self.PosY ... der gleich beim ersten Schreiben des Codes mit aufgenommen wird und in meinen Programmen oft solange bleibt, bis das Projekt fertiggestellt ist. Also bei mir sähe der Coce dann so aus: BlitzMax: [AUSKLAPPEN]
Oft ist nämlich der Fehler ganz wo anders zu suchen. Möglicherweise sind die Koordinaten schon beim Einlesen nicht korrekt gelesen worden... Möglicherweise liegen zwei Objekte übereinander. Der PRINT-Befehl zeigt aber eindeutig, ob und wann etwas gezeichnet wurde. Mit solchen PRINT-Befehlen kann man Fehler viel schneller entdecken. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Alles klar, Habe mir mal mit Print alles ausgeben lassen und so wie es aussieht wird alles korrekt eingelesen, allerdings beim einfügen in den Type irgenwie kreuz und quer vermischt... Hier mal die Laderoutine:
BlitzMax: [AUSKLAPPEN] Function ReadLVLData(File:String) (Die Funktion ReadParams habe ich selber geschrieben, sie ließt die Parameter aus einer Zeile; BlockList enthält alle Blöcke) |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
jetzt ist alles klar: du liest die "Block"-Abschnitte der Datei in immer wieder das selbe typ-objekt TempBlock.
Du musst das NEW in die Schleife holen: BlitzBasic: [AUSKLAPPEN] ... Repeat mit DEBUGGING ![]() BlitzBasic: [AUSKLAPPEN] Function ReadLVLData(File:String) |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst keine 100 Strings im Array reservieren, wenn du nur 2-3 benutzt. Lasse dir ein Array der richtigen Größe zurückgeben.
ListAdd könnte man auch in die New Methode verlagern und es macht sich praktisch immer gut, eine Create-Funktion zu benutzen, um neue Objekte zu erzeugen und Werte zu zu weisen. |
||
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) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Alles klar, so funktionierts, danke an alle die halfen ![]() |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group