benötige Hilfe für mein Schachspiel[gelöst]
Übersicht

ClayCBetreff: benötige Hilfe für mein Schachspiel[gelöst] |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Ich hab ein Prob: Nachdem ich bei meinem Spiel einen legalen Zug gemacht habe wird der Figurentyp(der erste Bauerweiß ist z.B. 11 der schwarze König -6) in ein 2-dimensionales Array geschrieben und danach wird das ganze Schachfeld neu gezeichnet das erfolgt über die Funktion Redraw Code: [AUSKLAPPEN] Function Redraw:Int (schacharray:Int[,])
Local Figurtypredraw:Int Local XZwischenwertredraw:Int Local YZwischenwertredraw:Int Local XZahlvariable:Int Local YZahlvariable:Int Local Schachbrett:TImage = LoadImage("Schachbrett.png") Cls DrawImage Schachbrett:TImage, 40, 40 Flip For XZahlvariable = 0 To 8 For YZahlvariable = 0 To 8 XZwischenwertredraw = XZahlvariable * 60 YZwischenwertredraw = 540 - (60 * YZahlvariable) Figurtypredraw = schacharray[XZahlvariable, YZahlvariable] If Figurtypredraw = 21 DrawImage Turmw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -21 DrawImage Turms, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 22 DrawImage Turmw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -22 DrawImage Turms, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 31 DrawImage Pferdw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -31 DrawImage Pferds, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 32 DrawImage Pferdw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -32 DrawImage Pferds, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 41 DrawImage Springerw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -41 DrawImage Springers, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 42 DrawImage Springerw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -42 DrawImage Springers, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 5 DrawImage Damew, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -5 DrawImage Dames, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 6 DrawImage Kingw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -6 DrawImage Kings, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 11 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 12 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 13 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 14 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 15 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 16 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 17 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = 18 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -11 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -12 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -13 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -14 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -15 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -16 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -17 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If If Figurtypredraw = -18 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If Next Next End Function Diese funktioniert soweit das Problem ist wenn ich das Spiel minimiere oder ein anderes Fenster hab ich immer irgendwelche Schnipsel oder "Fensterfetzen" von dem vorhin geöffnetetn, ist klar weil die Funktion nicht aufgerufen wird. ![]() ![]() so sieht das dann aus... Dann dachte ich mir ich mach das mit einem Timer somit wird die Funktion Redraw schnell hintereinander aufgerufen das Ergebnis war dass alle Grafiken geflackert haben ich schätz mal das liegt daran das die Funktion Redraw zu langsam ist oder? Vl hat wer Vorschläge das ganze anders zu machen oder Tipps/Tricks um das auf dem Weg zu lösen Danke schonmal für Hilfe |
||
- Zuletzt bearbeitet von ClayC am Do, Feb 19, 2009 20:41, insgesamt einmal bearbeitet
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast nach jedem drawbefehl ein Flip, das ist schonmal voll daneben.
Der gängige Weg ist cls draw draw draw flip - also erst flip wenn alles eingezeichnet wurde, und nur ein flip in der Mainloop. Dann endet auch das Geflacker. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
ClayC |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BladeRunner hat Folgendes geschrieben: Du hast nach jedem drawbefehl ein Flip, das ist schonmal voll daneben.
Der gängige Weg ist cls draw draw draw flip - also erst flip wenn alles eingezeichnet wurde, und nur ein flip in der Mainloop. Dann endet auch das Geflacker. Ja auf die Idee hätt ich auch selber kommen können weil ich das sonst eh so gemacht hab. kA warum ich das in der Funktion so gemacht hab^^ aber das hatt mein Problem nicht gelöst, flackert noch immer... |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Insgesamt ein sehr merkwürdiger Aufbau... ![]() Warum diese Verzögerung mit dem nur gelegentlichen Zeichnen? - okay, es ist nicht notwendig, aber würde es denn schaden? ![]() ![]() |
||
ClayC |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ava hat Folgendes geschrieben: Insgesamt ein sehr merkwürdiger Aufbau...
![]() Warum diese Verzögerung mit dem nur gelegentlichen Zeichnen? - okay, es ist nicht notwendig, aber würde es denn schaden? was meinst du damit? das mit Flip hab ich ausprobiert wenn ich Flip(1) mache zeichnet er es zwar auf eine andere Weise aber nur noch langsamer und damit mit mehr Flackern, und Standart ist -1 |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könnte das mit der GUI zu tun haben? (MaxGUI?) Unregelmäßige Events -> Flackern? | ||
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) |
ClayC |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja ich habs mit der Maxgui gemacht, was meinst du mit Events?
Sollte eigentlich egal sein, wenn ich nämlich die Redraw-Funktion in der Timer Funktion aufrufe flackert es auch und das ist dann komplett unabhängig von der GUI Code: [AUSKLAPPEN] Function Timer() Local Timer:TTimer Timer = CreateTimer(10) Repeat Print "Ticks=" + WaitTimer(Timer) Redraw(schachfeld) Forever End Function so sieht die Timer Funktion aus die ich nur zum ausprobieren aus der Hilfe hab... |
||
ClayC |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem mit den "Fensterresten" wurde über Eventhooks gelöst. ![]() Aber wegen dem Flackern hab ich noch nichts herausgefunden |
||
![]() |
Ratchet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nicht dass es an deiner Grafikkarte oder den Treibern liegt?
Hast du schon mal das Beispiel welches bei BM dabei ist probiert? Flackert es dort auch? Eventuell mal mit SetGraphicsDriver DirectX/OpenGL ausprobieren. |
||
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro] |
ClayC |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ratchet hat Folgendes geschrieben: Nicht dass es an deiner Grafikkarte oder den Treibern liegt?
Hast du schon mal das Beispiel welches bei BM dabei ist probiert? Flackert es dort auch? Eventuell mal mit SetGraphicsDriver DirectX/OpenGL ausprobieren. An meinem PC liegt es nicht habs auf anderen ausprobiert da flackerts auch. Welches Bsp meinst du, also zu welchem Thema? Das mit SetDraphicsDriver werd ich heut noch ausprobiern |
||
![]() |
Ratchet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dieses Beispiel: ...\BlitzMax\samples\maxgui\glcube.bmx
EDIT: Äh, warum lädst du das Schachbrett Image jedesmal neu wenn du die Funktion aufrufst? Code: [AUSKLAPPEN] Function Redraw:Int (schacharray:Int[,])
... Local Schachbrett:TImage = LoadImage("Schachbrett.png") ... |
||
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro] |
ClayC |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Cube-Beispiel flackert nicht, am Treiber liegt es auch nicht und weil ich in der Zeile über dem "drawimage schachbrett" cls stehen habe zeichne ich es immer neu, nur um das mal zu klären.
Hab mir die Funktion nochmal näher angeschaut und hab ganz vergessen zu sagen dass NUR die Figuren flackern, also das Schachfeld flackert nicht und viel Logik braucht man dann nicht um zu erkennen dass das Problem an den Schleifen liegt. Also ich vermute dass die irgendwie zu langsam sind, kann das sein? Code: [AUSKLAPPEN] For XZahlvariable = 0 To 8
For YZahlvariable = 0 To 8 Code: [AUSKLAPPEN] If Figurtypredraw = 21
Hat wer eine Idee das ganze zu verschnellern also ich hoffe die Funktion ist klar, 21 ist der turm und mittles den for werden die felder im array "durchsucht" und wenn dort im array 21 steht wird auf diese stelle der turm gezeichnet. Code: [AUSKLAPPEN] XZwischenwertredraw = XZahlvariable * 60 YZwischenwertredraw = 540 - (60 * YZahlvariable) mit denen zwei Zeilen werden die Pixel für den Drawimage-Befehl berechnet Also meiner Meinung nach ist die Funktion zu langsam aber keine Ahnung was man dagegen machen kann. Eine Frage hab ich noch zum Flip-Befehl: In der Hilfe zu Flip steht "If sync is -1 and the current graphics object was NOT created with the Graphics command, then the flip will occur on the next vertical blank. " was ist mit vertical blank gemeint ich dachte an nicht verwendete Pixel bin mir aber nicht sicher bzw. verstehe den Sinn nicht. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das...
Code: [AUSKLAPPEN] Figurtypredraw = schacharray[XZahlvariable, YZahlvariable]
If Figurtypredraw = 21 DrawImage Turmw, Int XZwischenwertredraw, Int YZwischenwertredraw Flip End If lässt sich verkürzen zu Code: [AUSKLAPPEN] Select schacharray[XZahlvariable, YZahlvariable]
Case 21; DrawImage(Turmw, XZwischenwertredraw, YZwischenwertredraw) [...] End Selec Die beiden Verschachtelten Schleifen sind in keinem Fall zu langsam, wenn man keine groben Fehler macht. - Alles vor beginn der Hauptschleife Laden. - CLS 1x bevor der neue Frame gezeichnet wird, Flip 1x nachdem alles gezeichnet wurde... |
||
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) |
![]() |
amon |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] DrawImage Schachbrett:TImage, 40, 40 Flip
Ist das Flip dort ein Tipfehler oder wirklich noch immer drinnen? |
||
ClayC |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
amon hat Folgendes geschrieben: Code: [AUSKLAPPEN]
DrawImage Schachbrett:TImage, 40, 40 Flip
Ist das Flip dort ein Tipfehler oder wirklich noch immer drinnen? nein das ist schon lange weg aktueller code: Code: [AUSKLAPPEN] Function Redraw:Int (schacharray:Int[,])
Local XZwischenwertredraw:Int Local YZwischenwertredraw:Int Local XZahlvariable:Int Local YZahlvariable:Int Playertoggle(WerIstDran) Cls DrawImage Schachbrett:TImage, 0, 0 For XZahlvariable = 0 To 8 For YZahlvariable = 0 To 8 XZwischenwertredraw = (60 * XZahlvariable) - 40 YZwischenwertredraw = 500 - (60 * YZahlvariable) Select schacharray[XZahlvariable, YZahlvariable] Case 21 DrawImage Turmw, XZwischenwertredraw, YZwischenwertredraw Case - 21 DrawImage Turms, XZwischenwertredraw, YZwischenwertredraw Case 22 DrawImage Turmw, XZwischenwertredraw, YZwischenwertredraw Case - 22 DrawImage Turms, XZwischenwertredraw, YZwischenwertredraw Case 31 DrawImage Pferdw, XZwischenwertredraw, YZwischenwertredraw Case - 31 DrawImage Pferds, XZwischenwertredraw, YZwischenwertredraw Case 32 DrawImage Pferdw, XZwischenwertredraw, YZwischenwertredraw Case - 32 DrawImage Pferds, XZwischenwertredraw, YZwischenwertredraw Case 41 DrawImage Lauferw, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 41 DrawImage Laufers, Int XZwischenwertredraw, Int YZwischenwertredraw Case 42 DrawImage Lauferw, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 42 DrawImage Laufers, Int XZwischenwertredraw, Int YZwischenwertredraw Case 5 DrawImage Damew, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 5 DrawImage Dames, Int XZwischenwertredraw, Int YZwischenwertredraw Case 6 DrawImage Kingw, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 6 DrawImage Kings, Int XZwischenwertredraw, Int YZwischenwertredraw Case 11 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Case 12 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Case 13 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Case 14 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Case 15 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Case 16 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Case 17 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Case 18 DrawImage Bauerw, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 11 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 12 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 13 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 14 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 15 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 16 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 17 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw Case - 18 DrawImage Bauers, Int XZwischenwertredraw, Int YZwischenwertredraw End Select Flip Next Next End Function ich habs schon mal mit einer select-case gemacht und zur sicherheit jetzt gleich nochmal aber das Ergebnis ist das gleiche ![]() Edit: Die Bilder werden alle außerhalb der Hauptschleife geladen und dieser Cls, also in dieser Funktion, ist bis auf einen anderen der nur durch die GUI ausgelöst werden kann der einzige |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Flip hat nichts innerhalb der verschachtelten schleife zu suchen. | ||
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) |
ClayC |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Xeres hat Folgendes geschrieben: Flip hat nichts innerhalb der verschachtelten schleife zu suchen.
uiuiui das wars super danke Xeres! und natürlich auch vielen dank an all die anderen die sich meinem problem angenommen haben |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
...was dir BladeRunner schon im 1. Post mitgeteilt hatte ![]() |
||
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) |
ClayC |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Xeres hat Folgendes geschrieben: ...was dir BladeRunner schon im 1. Post mitgeteilt hatte
![]() Eigentlich schon... ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group