Wann den SHOWSCREEN

Previous topic - Next topic

D2O

Guten morgen,

das ganze vielleicht so?
Alles mit Array und seperaten Variablen,
3 Bilder/Karten,
2 davon in einem For Next zeichnen,
1 ausserhalb,
Berechnungen ausserhalb der For Next,

schaut dann so aus,
https://www.dropbox.com/sc/l51qapxixsbz9fx/AAAQg5PXp7tyGnrGs6Tx3Ymua

Code (glbasic) Select
// --------------------------------- //
// Project: Worebu
// Start: Friday, November 14, 2014
// IDE Version: 12.312

// 640 * 480 bei 60 FPS Standart GLB einstellung
SETCURRENTDIR("Media") // go to media files

// Systemmaus anzeigen
SYSTEMPOINTER TRUE


GLOBAL i% // for next counter
GLOBAL bild%[] // für die ID's
DIM bild%[3] // 0-2 = 3 Felder

GLOBAL winkel%,winkel2%  //Für die drehung
GLOBAL mx%,my%,bt1%,bt2% // Mousedaten

GLOBAL karte_y% // für die y position
GLOBAL rotocontrol = TRUE // soll gedreht werden dann TRUE





FOR i = 0 TO 2
bild%[i] = GENSPRITE()
LOADSPRITE i+".png",bild%[i] // Bilder haben den Namen 0.png,1.png...
NEXT

WHILE TRUE
// Berechnungen
MOUSESTATE mx%,my%,bt1%,bt2%

// Berechnungen für Zeichnen 1 und 2
INC winkel,1 // Pro schleifen durchgang (hier bei 60 FPS) winkel um 1" erhöhen
// Sicherheitsabfrage, da es nur 360° gibt, soll der zähler bei 359° wieder auf
// 0° zurückgestellt werden
IF winkel > 359 THEN winkel = 0

//Berechnungen für Zeichnen 3
IF karte_y < 350 // Ist die position kleiner 350, weiter y bewegen
INC karte_y,1
ELSE // ansonsten keine bewegung und keine drehung
rotocontrol = FALSE
winkel2 = 0
ENDIF
IF rotocontrol = TRUE // solange TRUE, drehen
DEC winkel2,1
IF winkel2 < 0 THEN winkel2 = 359
ENDIF




// 2 unterschiedliche Bilder in einer Forschleife zeichen
FOR i = 0 TO 1
// Zeichnen
//1
ROTOSPRITE bild[0],50,50,winkel% // Bild wird auf der position 50,50 gedreht,
//2 // bei einer framerate vom 60 FPS
ROTOSPRITE bild[1],mx,my,winkel% // hier hängt die Grafik an de Mouseposition
//3
NEXT

// ein Bild einzeln zeichnen
ROTOSPRITE bild[2],200,karte_y,winkel2% // Grafik bewegt sich nach unten





SHOWSCREEN  // Gezeichnetes anzeigen
WEND


I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Worebu

Danke für die Hilfe. ich glaube ich habe es. In "alten" Basic Dialekten hat man die Grafik irgendwo hingeschmissen und da lag sie, und man konnte in der Tatsturabrage eine "Warteschleife" einbauen (bis was einegeben wurde). Bei GLBasic MUSS ich immer Zeichnen oder Abfragen oder was immer, also in einer Schleife alles am laufen halten. Ich habe ja Beispiele und verschieden Lösungen bekommen, werde die mal anschauen und sehen welche besser passt.

Vielen Dank.
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

S.O.P.M.

QuoteIn "alten" Basic Dialekten hat man die Grafik irgendwo hingeschmissen und da lag sie, und man konnte in der Tatsturabrage eine "Warteschleife" einbauen (bis was einegeben wurde).
Genau das war meine Rede. Man hat die Grafik einmal gezeichnet und sie blieb, hier muss sie immer wieder gezeichnet werden. Man kann bei GLBasic zwar auch mit z. B. KEYWAIT dafür sorgen, dass das Programm anhält, doch das hätte dein Problem nicht gelöst. Ist dir auch der entscheidende Vorteil dieser Methode bewusst? ;)
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Worebu

Das der Screen immer Aktuell ist oder das Schneller auf änderungen reagiert wird.
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

S.O.P.M.

#49
Wie es in der Hilfe so herrlich formuliert ist: "GLBasic benutzt versteckte Bildschirmseiten für flackerfreien Grafikaufbau." Diese Phrase gefällt mir bis heute saumäßig gut :good:
Durch diese Methode hat man einen sauberen Bildaufbau. Grafiken, die bspw. verschoben werden sollen, müssen vorher nicht mit der Farbe des Hindergrundes übermalt werden. Dadurch kann ein Flackern entstehen - jeder kennt das von früher. Die auf die versteckte Bildschirmseite gezeichneten Grafiken werden praktisch auf einen Schlag in den Vordergrund gebracht.

Eventuell könnte für dich der Befehl CLEARSCREEN -1 interessant sein. Damit werden Grafiken zwar auch nicht unmittelbar auf den sichtbaren Bereich gerendert, jedoch bleiben sie bei jedem Aufruf von SHOWSCREEN auch ohne erneutes Zeichnen erhalten. Das zumindest interpretiere ich selbst aus der Beschreibung. Allerdings solltest du diese Variante nicht verwenden, sondern dir die gebräuchliche Methode aneignen. Schließlich machst du es, wie es dir am liebsten ist.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Worebu

Wobei ich jetzt aber nicht sagen könnte

for i = 1 to 360
  rotosprite 1, 300,300, i
next

weil ich ja keinen Showscreen einbauen darf (soll). Dann müsste ich solche Sachen immer ohne Schleife machen, und einen Zähler mitlaufen lassen.

So nachdem Motto:

if i < 360
  rotosprite 1, 300,300, i
   inc i
endif

so mal als beispiel, ist das richtig?
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

kanonet

Exakt, eine FOR-Schleife wäre für soetwas falsch, die könntest du höchstens gebrauchen, wenn du durch ein Array mehrerer Elemente gehst und sie alle zeichnest - aber nicht, um ein einzelnes Element zu zeichnen.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Worebu

#52
Aber wenn ich jetzt 5 karten habe, muss ich 5 mal Drawsprite einbauen wenn die karten zeichen will die unten sind unten sind?
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

S.O.P.M.

Selbstverständlich! Für jede darzustellende Kartengrafik ein DRAWSPRITE.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

kanonet

Wenn du alle Karten in einem Array hast und durch dieses mit FOR oder FOREACH läufst, dann musst du nur ein DRAWSPRITE schreien (natürlich werden trotzdem 5 Aufgerufen), das ist, was ich meinte damit den Code so zu gestallten, dass es egal ist, wie viele Karten du tatsächlich hast.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

S.O.P.M.

Ja natürlich meinte ich auch mehrere Aufrufe von DRAWSPRITE, nicht, dass der Befehl wegen mehrerer Karten auch mehrfach im Code steht ;)
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Schranz0r

Sag ja, Basics...
Evtl. komm ich morgen dazu die ersten Tutorials zu machen
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Worebu

da freuh ick mir jetzt schon.
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD