PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Panorama soll automatisch scrollen



Giantlink
11.12.2008, 22:06
Hallo zusammen,

ich suche ein Script für den RPG Maker XP, bei dem der Hintergrund automatisch scrollt, so dass das Gefühl entsteht, man befinde sich auf oder in einem fahrenden Objekt (z.B. in einem Zug) - ohne, dass der Held sich dabei bewegen muss.

Diese Option war im RPG Maker 2003 noch vorhanden, nun wurde sie gestrichen... Fragt mich nicht warum...


Vielen Dank

sorata08
11.12.2008, 23:37
Das fragen sich alle...^^"

Nun, ich hatte da mal was in der Hand, hat aber wohl nicht mit meinen anderen Scripten funktioniert...
Guck mal auf rmxp.org nach "Parallex Panorama" oder so...

Shining Advances
12.12.2008, 08:45
$speed = 2
$v_speed = 0

class Spriteset_Map
alias pano_update update
def update
pano_update
@panorama.ox += Graphics.frame_count * $speed
@panorama.oy += Graphics.frame_count * $v_speed
end
end


hab mal schnell was gebastelt
über main einfügen

für $speed die waagrechte geschwindigkeit un für $v_speed die senkrechte eingeben.

Giantlink
12.12.2008, 12:59
$speed = 2
$v_speed = 0

class Spriteset_Map
alias pano_update update
def update
pano_update
@panorama.ox += Graphics.frame_count * $speed
@panorama.oy += Graphics.frame_count * $v_speed
end
end


hab mal schnell was gebastelt
über main einfügen

für $speed die waagrechte geschwindigkeit un für $v_speed die senkrechte eingeben.
Perfekt. Danke http://www.multimediaxis.de/images/smilies/old/sm_12.gif

Ich werde dich auch in den Credits erwähnen ;)

Nur eine Sache wüsste ich noch gerne:

Wenn das Panorama mal nicht scrollen soll bzw. schneller/langsamer - Wie genau richte ich das ein?

Aufjedenfall schonmal Danke für die Hilfe :)

Shining Advances
12.12.2008, 13:48
ui stimmt an sowas hab ich gar nicht gedacht^^
ersetz am besten zeile 8/9 durch folgendes


@panorama.ox += Graphics.frame_count * $game_variables[$speed]
@panorama.oy += Graphics.frame_count * $game_variables[$v_speed]

jetzt bei $speed bzw $v_speed die variablen nr angeben, die die geschwindigkeit speichern sollen.
wenn du jetzt den wert dieser variablen änderst, ändert sich auch die geschwindigkeit.
(wenn der wert der variablen 0 ist, bewegt sich das panorama nur wenn man läuft - also so wies normalerweise ist)

Kelven
12.12.2008, 14:52
Es ist erschreckend erstaunlich wie einfach das Problem gelöst werden kann. Jetzt muss aber noch mal jemand erklären, warum das eigentlich funktioniert bzw. wieso das Panorama nahtlos an sich selber gehängt wird und nicht nur ein Sprite ziellos über den Bildschirm schwebt. Mit welchen Scripten könnte das denn theoretisch Probleme geben, sorata08 hat ja so was angesprochen?

-KD-
12.12.2008, 15:17
Weil es ein Plane ist und kein Sprites. Planes sind wie Tapeten, sie wiederholen ihr enthaltenes Muster immer. Bewegt man die Ursprungskoordinaten eines Planes, bewegt man das Muster.

Ich würde aber trotzdem keine globalen Variablen verwenden, sondern Instanzvariablen der Klasse Game_Screen ;) Aber das ist wohl Geschmackssache.

Ascare
12.12.2008, 16:14
Habs nicht ausprobiert, aber müsste es dadurch das man Graphics.frame_count mit einer Zahl multipliziert mit der Zeit nicht immer schneller werden? Denn Graphics.frame_count wächst ja ständig, je mehr Zeit vergeht.

Also so zB (hab den Inhalt mal dazugeschrieben):
@panorama.ox += Graphics.frame_count (500) * 2
sind gleich @panorama.ox += 1000
nach einiger Zeit aber:
@panorama.ox += Graphics.frame_count (10000) * 2
sind gleich @panorama.ox += 20000

oder mache ich gerade wieder einen Denkfehler? ^^

Shining Advances
12.12.2008, 16:25
ne weil beim normalen update der ox/y wert immer wieder auf die normale position zurück gesetzt wird.
heißt der vorher dazu addierte wert wird wieder gelöscht.

wenn man zb nur um 10 erhöht und nicht um einen steigenden wert wie frames, so bleibt die position gleich.
nur halt um 10 weiter nach links/rechts (ka^^) als er normalerweise sein würde.

SMWma
12.12.2008, 16:32
if $game_variables[5] > 1 then
$speed = 2
$v_speed = 0

class Spriteset_Map
alias pano_update update
def update
pano_update
@panorama.ox += Graphics.frame_count * $speed
@panorama.oy += Graphics.frame_count * $v_speed
end
end
else
$speed = 0
$v_speed = 0

class Spriteset_Map
alias pano_update update
def update
pano_update
@panorama.ox += Graphics.frame_count * $speed
@panorama.oy += Graphics.frame_count * $v_speed
end
end
end

Das sollte doch auch funktionieren, oder??
Ich habe es nicht getestet, also kann danach eine Fehlermeldung kommen.
Beutrteilt mal mein erstes verbessertes Script...

Ascare
12.12.2008, 17:41
@Shining Advances
Ah, ok, muss ich mal unbedingt ausprobieren.
btw: ist Graphics.frame_count eigentlich unendlich? Irgendwann hört die Zahl doch auch auf zu zählen oder? Würde ja bedeuten das sich dann nach einer bestimmten Spielzeit das Pano nicht mehr bewegt.

@Adrian2000
Uh, das sieht nach einer Verschlimmverbesserung aus. Eine if Abfrage ohne Klasse, ohne gar nichts? Müsste eigentlich sofort zum Absturz führen, selbst wenn nicht, verstehe ich nicht was der Zweck dieser Abfrage ist. Ist doch schon am bequemsten X/Y über Game Variablen zu steuern so wie es Shining Advances schon gepostet hat.

Kelven
12.12.2008, 18:31
@Adrian2000
So geht das leider nicht. Die Abfrage gehört direkt in die Methode und globale Variablen bräuchtest du auch nicht mehr. Allerdings ist wie Ascare schon gesagt hat die Methode von Shining Advances sowieso besser.



class Spriteset_Map
alias pano_update update
def update
pano_update
if $game_variables[5] > 1
speed = 2
v_speed = 0
else
speed = 0
v_speed = 0
end
@panorama.ox += Graphics.frame_count * speed
@panorama.oy += Graphics.frame_count * v_speed
end
end

Shining Advances
12.12.2008, 18:35
@Shining Advances
Ah, ok, muss ich mal unbedingt ausprobieren.
btw: ist Graphics.frame_count eigentlich unendlich? Irgendwann hört die Zahl doch auch auf zu zählen oder? Würde ja bedeuten das sich dann nach einer bestimmten Spielzeit das Pano nicht mehr bewegt.


wenn ich mich nicht irre isses unendlich.
wird jedesmal wenn Graphics.update aufgerufen wird um 1 erhöht.
glaube nicht, dass es irgendwann aufhört zu zählen, weil damit auch die spielzeit ausgerechnet wird (siehe Window_PlayTime).
wäre recht unsinnig die spielzeit irgendwann nicht mehr weiter zählen zu lassen ;)

edit:
ich würde bei den anderen vorschlägen das > 0 durch ein != 0 ersetzen damit man das ganze auch per negative werte in die andere richtung bewegen kann

sorata08
12.12.2008, 19:13
Es ist erschreckend erstaunlich wie einfach das Problem gelöst werden kann. Jetzt muss aber noch mal jemand erklären, warum das eigentlich funktioniert bzw. wieso das Panorama nahtlos an sich selber gehängt wird und nicht nur ein Sprite ziellos über den Bildschirm schwebt. Mit welchen Scripten könnte das denn theoretisch Probleme geben, sorata08 hat ja so was angesprochen?

Ich hatte nur festgestellt, dass es bei mir nicht funktionierte, da mein KS wohl schon irgendwie auf die Scene Map zugreift...Oo anders habe ich es noch nicht ausprobiert...

sPike.
12.12.2008, 19:25
ich würds etwas anders machen. damit sich der speed noch anpassen lässt.


class Spriteset_Map
alias pano_update update
def update
pano_update
if $game_variables[5] > 1 or $game_variables[6] > 1
speed = $game_variables[5]
v_speed = $game_variables[6]
else
speed = 0
v_speed = 0
end
@panorama.ox += Graphics.frame_count * speed
@panorama.oy += Graphics.frame_count * v_speed
end
end

Kelven
12.12.2008, 20:01
Die If-Kontrollstruktur ist aber völlig überflüssig, weil man - s.o. - direkt die Variablen abfragen kann.

The_Burrito
12.12.2008, 20:50
Das Skript hat noch ein kleines Problem. Da du das Panorama immer vom Mittelpunkt aus verschiebst, und nicht von der letzten Position, bemerkt man Änderungen in der Geschwindigkeit, nicht als eben solcher, sondern als Ruckhafte veränderung der Position.

Shining Advances
12.12.2008, 21:20
stimmt :/
hier ne verbesserte version

1 bzw 2 bei game_variables umstellen auf die gewünschte variable


class Spriteset_Map
alias pano_update update
alias pano_initialize initialize
def initialize
@px = 0
@py = 0
pano_initialize
end
def update
pano_update
@px += $game_variables[1]
@py += $game_variables[2]
@panorama.ox += @px
@panorama.oy += @py
end
end

SMWma
12.12.2008, 21:27
dann muss ich wohl leider nochmal Ruby lernen...
Oder etwas weiter lernen^^
Aber abgesehen dafon, dass ich die Class vergessen habe, war es doch in Odrnung, oder??

Ascare
13.12.2008, 00:56
@Shining Advances
Super, klappt. Werde es vielleicht in meinem Projekt verwenden, auch wenn ich vielleicht keine scrollenden Panos habe, mal sehen.

@Adrian2000
Nö, meiner Meinung nach irgendwie nicht. So wie es Shining Advances jetzt gepostet hat, so ist es in Ordnung. Schön die Methoden aliased usw.