scrollen

Previous topic - Next topic

Shogun

Hallo alle zusammen,
w?rde mich freuen wenn mir jemand erkl?rt warum der screen anf?ngt zu scrollen.
Ich habe mir aus mehreren Schnipseln eine einfache L?sung zum scrollen gebastelt, es funktioniert auch nur leider verstehe ich es nicht so richtig.
Also, folgender Code:

DRAWSPRITE array
  • [y], xpos-scrollx, ypos-scrolly       hier ist das Problem, warum kann ich scrollen wenn ich die Variablen scrollx und scrolly von den Tilepositionen abziehe?
    DRAWSPRITE 2, playerx, playery

    IF KEY(200) THEN playery=playery-3
    IF KEY(208) THEN playery=playery+3
    IF KEY(203) THEN playerx=playerx-3
    IF KEY(205) THEN playerx=playerx+3

    IF playerx<440 AND KEY(203) THEN scrollx=scrollx-3
    IF playerx>200 AND KEY(205) THEN scrollx=scrollx+3

    IF playery<200 AND KEY(200) THEN scrolly=scrolly-3
    IF playery>240 AND KEY(208) THEN scrolly=scrolly+3

    IF playerx<0 THEN playerx=0
    IF playerx>590 THEN playerx=590

    IF playery<0 THEN playery=0
    IF playery>410 THEN playery=410

    Ich wei?, es ist sehr einfach gehalten. Aber es reicht mir so. Freue mich ?ber jede Hilfe.

Schranz0r

Du setzt beim Tastendruck die Variable ScrollX oder ScrollY h?her oder tiefer

Scrolling solltest du aber nur auf die Tilemap/Map anwenden, sonst machts weniger Sinn ;)
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

D2O

Hmmm, ist etwas verwirrend ;)

Du hast die pos und scroll Variablen.

Von der pos wird scroll immer abgezogen OK
Pos hat "0" und scroll jenachdem +3 oder -3, Ok.

Jetzt bewegts Du den Player nach rechts, ab einem gewissen punkt soll die map nach links scrollen,
ist der erreicht,  bekommt scroll den wert "+3".

Nun schaut das so aus

pos - scroll
"0 - (+3)" = - 3

Verwirrend gell ;)

Folgendes, es wird von Pos immer etwas abgezogen, aber hiert heist das +3 das von pos 3 weiter ins Negative abgezogen wird,
anders herum genauso.
Soll das ganze nach rechts scrollen wird von
pos - scroll
"0 - (-3)" = +3
pos auch 3 abgezogen, da es aber selber einen Negativen wert hat muss man hier etwas umdenken da das ganze jetzt durch das zweifache - ins posetive
rutscht.

Man ist das d?mmlich zu erkl?ren... :puke:

Ich hoffe Du verstehst den mist denn ich hier schreibe :)

Hier ein beispielprogram:
Code (glbasic) Select

a% = 100

PRINT pos - a,10,10


a% = -100
PRINT pos - a,10,30


SHOWSCREEN
KEYWAIT
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

Shogun

Das ist klar, aber wenn ich z.Bsp. eine Player-Variable hoch oder runter setze, bewegt sich der Spieler, aber der screen scrollt ja nicht.
Ich verstehe den Zusammenhang mit xpos-scrollx, xpos-scrolly nicht.

D2O

#4
Mom, ich scheib mal ein Beispiel.

Edit:

posx und posy sind hier die Grundkoordinaten
damit man etwas hat wovon etwas abgezogen oder dazugez?hlt werden kann.
Ich bin im erkl?ren nicht der st?rkste  :S
aber ich Denke das Dir der Code weiter helfen wird wie das Funktioniert.

Er ist einfach gehalten und nicht auf speedoptiemierung ausgelegt.
Code (glbasic) Select

// Die Tiles sind hier 32 x32 Pixel gross
/// F?r die Map
DRAWRECT 0,0,32,32,RGB(0xff, 0x00, 0x00)
DRAWRECT 1,1,30,30,RGB(0xff, 0xff, 0x00)

GRABSPRITE 0,0,0,32,32
BLACKSCREEN


//F?r den Player
DRAWRECT 0,0,32,32,RGB(0x00, 0x80, 0xff)
GRABSPRITE 1,0,0,32,32
BLACKSCREEN


// gebrauchte Variablen
GLOBAL posx%, posy%, scrollx%,scrolly%,playerx%,playery%,x%,y%







WHILE TRUE


// map zeichnen
/// simple map ohne extras ;)
// 20 felder lang und hoch

FOR y = 0 TO 19
FOR x = 0 TO 19
///pos ist hier die grundposition
DRAWSPRITE 0 ,(posx-scrollx) +( 32*x) , (posy-scrolly) + (32*y)

NEXT
NEXT

// player zeichnen

DRAWSPRITE 1, playerx, playery

//----------------------------------------------

// Berechnungen
IF KEY(200) THEN playery=playery-3
IF KEY(208) THEN playery=playery+3
IF KEY(203) THEN playerx=playerx-3
IF KEY(205) THEN playerx=playerx+3

IF playerx<440 AND KEY(203) THEN scrollx=scrollx-3
IF playerx>200 AND KEY(205) THEN scrollx=scrollx+3

IF playery<200 AND KEY(200) THEN scrolly=scrolly-3
IF playery>240 AND KEY(208) THEN scrolly=scrolly+3

IF playerx<0 THEN playerx=0
IF playerx>590 THEN playerx=590

IF playery<0 THEN playery=0
IF playery>410 THEN playery=410



SHOWSCREEN
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

Shogun

schon mal danke, ich schaue es mir mal an.

Schranz0r

Der player bleibt ja auf seinen X;Y Koordinaten  nur die Map wird unter deinem Hintern verschoben :D
Stell dir vor die stehst aufm Laufband, genau das gleiche, du "stehts" am fleck rennst aber und das Laufband bewegst sich 10 KM/H nach -Y :D
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

Orpheus_2003

Ich finde es f?r ein Jump&Run so besser.
Der Player kann sich in einem Teil des Bildes bewegen.
Kommt er ausserhalb, scrollt die Map.
So funktioniert es bei meinem Game wunderbar.....