RPG-Maker Quartier

Hier dreht sich alles um die RPG-Maker-Reihe von ASCII/Enterbrain. Der RPG-Maker ist ein Tool, mit dem du dir dein eigenes kleines Rollenspiel erstellen kannst. Du findest hier alles, was du dazu brauchst. Aber natürlich umfasst die Community noch mehr!
Aktuelle Zeit: Di Mär 03, 2020 3:21

Alle Zeiten sind UTC + 1 Stunde



Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
Offline
Alex
Alex
Beiträge: 19
Alter: 31
 Betreff des Beitrags: Destinyscript
BeitragVerfasst: Mi Mär 30, 2011 8:46 
Guten morgen,

ich wollt mal Nachfragen, welche Sprache man für die Scripts benutzen kann.

Die Hilfsdatei ist echt nicht schlecht, aber wenn ich z.b. das Pixelmovement von Simon sehe, wie z.b. mit Rect, finde ich nichts in der Hilfsdatei.
Vllt kann mir da jemand helfen.

mfg err0r


Nach oben
 Profil  
Mit Zitat antworten  
Offline
Yoji
Yoji
Benutzeravatar
Beiträge: 2590
Alter: 30
Wohnort: Tübingen
 Betreff des Beitrags: Re: Destinyscript
BeitragVerfasst: Mi Mär 30, 2011 22:40 
Sicher, dass da nichts drinsteht?
Eigentlich müssten alle Befehle in der DestinyScript_Deu.chm aufgelistet sein.
Ich kenne das Skript von Simon leider nicht und kann dir da so speziell nicht helfen. Im Zweifelsfall einfach mal in das Destiny-Beispiel-Projekt schauen, da werden eigentlich grundsätzlich alle Funktionen gezeigt.

_________________
Bild
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
Offline
Alex
Alex
Beiträge: 19
Alter: 31
 Betreff des Beitrags: Re: Destinyscript
BeitragVerfasst: Do Mär 31, 2011 2:14 
hahaha... Ich war echt blind. ^^

Danke BlueGesyr

Aber wenn ich mir jetzt z.b. die Standposenframe von Simon ansehe + den Hilfsdateischnippsel... seh ich nur noch komische Fragezeichen um mich herum schwirren^^

Code aus dem DestinyScript-Hilfsdatei

Picture[Index].CopyRect(X-Koordiante, Y-Koordinate, Quellbild-ID, Links, Oben, Rechts, Unten)
-----
$Picture[1].CopyRect(0, 0, 2, 0, 0, 24, 24)


$Picture[53].CopyRect(5, 5, 4, (9-(v[75]%10))*93, (v[75]/10)*119, (9-(v[75]%10))*93+93, (v[75]/10)*119+119)

ich weiß das die 4 die Bilddatei ist, die 4 Berechnungen die Ecken sind und die 2x 5 ab welche Eck es berechnet wird. Aber gehen die Berechnungen nicht Leichter?


Nach oben
 Profil  
Mit Zitat antworten  
Offline
Yoji
Yoji
Benutzeravatar
Beiträge: 2590
Alter: 30
Wohnort: Tübingen
 Betreff des Beitrags: Re: Destinyscript
BeitragVerfasst: Fr Apr 01, 2011 9:11 
Schauen wir mal.

Die grundsätzlichen Berechnungen sind
Code:
Links (v[75]%10)*93
Oben (v[75]/10)*119
Unten (v[75]%10)*93+93
Rechts (v[75]/10)*119+119)


Weiter gilt: v[75] benennt die Animations ID und jedes Einzelsprite ist 93x119 Pixel groß.

Jetzt schauen wir uns die Codes einmal genau an.


Code:
Links (v[75]%10)*93


Wichtig ist vor allem v[75]%10 (AnimationsID mod 10).

Ermittel den Restwert der Teilung zwischen der AnimationsID und 10. Zum Beispiel haben die 4 Idle Animationsstufen die Werte 0 bis 3 (=AnimationsID). Es werden also folgende Werte zurückgegeben:
0 => 0 (0 : 10 = 0 R 0)
1 => 1
2 => 2
3 => 3
Soweit logisch, oder?

Das Spritesheet hat 10 Sprites nebeneinander, d.h. in der ersten Reihe sind die Werte der Animationsstufen 0 - 9, in der zweiten folglich 10 - 19, usw. Also ermittelt die Berechnung sozusagen die Spalte, in der das Einzelsprite steht:
5 => 5
15 => 5 (15 : 10 = 1 R 5)
9 => 9
19 => 9
54 => 4 (54 : 10 = 5 R 4)

Somit haben wir also die Spalte angegeben und multiplizieren diesen Wert mit der Breite der Einzelsprites, hier 93, und ermitteln somit, wo das Einzelsprite (links) anfängt.


Code:
Oben (v[75]/10)*119


Wichtig ist vor allem v[75]/10 (AnimationsID / 10).

Diese Rechnung hier ist genau so simpel, wie der obrige. Diesmal ermitteln wir nicht die Spalte, sondern die Zeile, in der unser Einzelsprite zu finden ist. Diesmal sehen die Ergebnisse wie folgt aus:
5 => 0 (5 : 10 = 0,5 ~= 0)
14 => 1 (14 : 10 = 1,4 ~= 1)
57 => 5 (57 : 10 = 5,7 ~= 5)

Prinzipiell wird alles abgeschnitten, was hinter dem Komma steht. Danach multipliziert man mit Höhe der Einzelsprites und erhält somit den oberen Anfang des gewünschten Sprites.

Für die Rechts- und Unten-Werte wird lediglich noch einmal die Breite, bzw. Höhe des Sprites dazugerechnet. Also im Prinzip ganz einfach.


Nun noch zu der 9, die nur für den Code des Spritesheets mit der linken Blickrichtung gilt:
Da hier alles horizontal gespiegelt ist, müssen wir also unsere Spalte von 9 abziehen um das korrekte Sprite zu erhalten.




Zitat:
ich weiß das die 4 die Bilddatei ist, die 4 Berechnungen die Ecken sind und die 2x 5 ab welche Eck es berechnet wird. Aber gehen die Berechnungen nicht Leichter?

Ja, 4 ist die Bilddatei, in die kopiert wird und 5 jeweils die Anfangspixel, wohin kopiert wird.
Das Skript benutzt Algorithmen zur Berechnung, theoretisch könnte man auch jedes Sprite einzeln angeben, was allerdings mehr Arbeit mach.
Voraussetzung für das Funktionieren dieser Algorithmen ist allerdings, dass alles Sprites gleich groß sind. Sollte das nicht der Fall sein, wäre auch ein Code denkbar, der die Sprites heraussucht. Eine solche Technik habe ich z.B. bei meiner CTE benutzt. Allerdings rechnet mein Skript nur von links nach rechts. Grundsätzlich kann man aber auch von links nach rechts und von oben nach unten rechnen.

_________________
Bild
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
Offline
Alex
Alex
Beiträge: 19
Alter: 31
 Betreff des Beitrags: Re: Destinyscript
BeitragVerfasst: Fr Apr 01, 2011 13:00 
Wenn ich es jetzt richtig verstanden habe, werd ich es mal mit meinen Worten sagen.

Links (v[75]%10)*93 - v75 ist die Variable der AnimationID worin das bild gespeichert ist | mod 10 gibt an, wie viele Bilder in einer Spalte sind - *93 gibt die Breite der einzelnen Bilder in der Spalte an.

Oben (v[75]/10)*119 - das gleiche wieder wie oben, wie viele Zeilen und wie hoch die Zeile ist. Aber wenn ich jetzt z.b. von Simon sehe, dass sein Frame 24 Zeilen hat, wird die Berechnung nur innerhalb den ersten 10 Zeilen stattfinden oder?

Unten (v[75]%10)*93+93
Rechts (v[75]/10)*119+119)

Bei den Codestelle versteh ich wahrscheinlich nicht ganz, aber hier muss ich einfach den Wert der * genommen wird einfach nochmal dazu addieren und das wars oder?

Bei X und Y ist egal ob ich 0 nehme oder eine andere zahl oder muss ich hier bestimmte Zahlen wählen?

------------------------------------------------------------------------------------------------------------------------

Und jetzt das worin ich überhaupt nicht kapiere:

Zitat:
Ermittel den Restwert der Teilung zwischen der AnimationsID und 10. Zum Beispiel haben die 4 Idle Animationsstufen die Werte 0 bis 3 (=AnimationsID). Es werden also folgende Werte zurückgegeben:
0 => 0 (0 : 10 = 0 R 0)
1 => 1
2 => 2
3 => 3
Soweit logisch, oder?


Kann ich auch mehr Animationen dazugeben? Wenn ja, worauf muss ich achten? Muss ich dann z.b. für 8 Animationen z.b. in der Breite 20 Bilder haben statt 10?

Zitat:
Das Spritesheet hat 10 Sprites nebeneinander, d.h. in der ersten Reihe sind die Werte der Animationsstufen 0 - 9, in der zweiten folglich 10 - 19, usw. Also ermittelt die Berechnung sozusagen die Spalte, in der das Einzelsprite steht:
5 => 5
15 => 5 (15 : 10 = 1 R 5)
9 => 9
19 => 9
54 => 4 (54 : 10 = 5 R 4)


Wie kommst du auf die Zahlen?

So siehts auch damit aus
Zitat:
Diese Rechnung hier ist genau so simpel, wie der obrige. Diesmal ermitteln wir nicht die Spalte, sondern die Zeile, in der unser Einzelsprite zu finden ist. Diesmal sehen die Ergebnisse wie folgt aus:
5 => 0 (5 : 10 = 0,5 ~= 0)
14 => 1 (14 : 10 = 1,4 ~= 1)
57 => 5 (57 : 10 = 5,7 ~= 5)



Ich bedanke mich schon mal dafür. :)


Nach oben
 Profil  
Mit Zitat antworten  
Offline
Yoji
Yoji
Benutzeravatar
Beiträge: 2590
Alter: 30
Wohnort: Tübingen
 Betreff des Beitrags: Re: Destinyscript
BeitragVerfasst: Fr Apr 01, 2011 15:13 
Ich glaube, du bringst da etwas mit der AnimationsID durcheinander. Die ist lediglich dafür da, um die Nr. des Sprites zu bestimmen, welches abgerufen wird:
Bild
Die Zahlen stellen dabei die AnimationsID des jeweiligen Sprites dar.


Nehmen wir an, deine Laufanimation hat 8 Frames. Sie beginnt bei dem Sprite mit der ID 5 und geht bis einschließlich zu dem mit der ID 12.

Der Animationsverlauf an sich befindet sich in einem CE (im Skript ab CE Nr. 40), das wie folgt aussieht:
Code:
--Parallel Process--
<> Change AnimationsID = 5
<> Wait 0,1
<> CallEvent ShowAni
<> Change AnimationsID = 6
<> Wait 0,1
<> CallEvent ShowAni
<> Change AnimationsID = 7
<> Wait 0,1
<> CallEvent ShowAni
...
<> Change AnimationsID = 12
<> Wait 0,1
<> CallEvent ShowAni



Das CE ShowAni ist dann für die Berechnung und die Anzeige des gewünschten Sprites verantwortlich. Dafür errechnet es anhand der ID, welches Sprite es vom Sprite Sheet nehmen muss. Dafür muss es wissen, wo das Sprite anfängt und wo es endet.
Bild
Wie man auf der Grafik erkennt, sind dafür 4 Werte von Nöten: ( Links | Oben ) und ( Rechts | Unten )

Also geht man her und errechnet die Werte per Algorithmen aus der AnimationsID:
Code:
-- AnimationsID: 5 --
Links: ( 5 mod 10 ) * Breite pro Sprite
Oben: ( 5 / 10 ) * Höhe pro Sprite
Rechts: ( ( 5 mod 10 ) * Breite pro Sprite ) + Breite pro Sprite
Unten: ( ( 5 / 10 ) * Höhe pro Sprite ) + Höhe pro Sprite


Ist jedes Sprite (wie im Skript 93x119 Pixel groß, sieht das also wie folgt aus:

Code:
-- AnimationsID: 5 --
Links:
( 5 mod 10 ) = 5
5 * 93 = 465
Oben:
( 5 / 10 ) = 0
0 * 119 = 0
Rechts:
465 + 93 = 558
Unten:
0 + 119 = 119


Folglich beginnt unser Sprite mit der ID 5 bei ( 465 | 0 ) und endet bei ( 558 | 119 ).

Das funktioniert für sämtliche Sprites auf dem Sprite Sheet, vorausgesetzt, die Sprites sind alle gleich groß und es befinden sich nicht mehr als 10 Sprites horizontal nebeneinander (bedeudet: nicht mehr als 10 Spalten). Wieviele Sprites vertikal nacheinander folgen ist egal (Zeilen).


Ein weiteres Beispiel für die ID 11:
Code:
-- AnimationsID: 11 --
Links:
( 11 mod 10 ) = 1
1 * 93 = 93
Oben:
( 11 / 10 ) = 10
1 * 119 = 119
Rechts:
93 + 93 = 186
Unten:
119 + 119 = 268


Folglich beginnt unser Sprite mit der ID 11 bei ( 93 | 119 ) und endet bei ( 186 | 268 ).




Zitat:
Aber wenn ich jetzt z.b. von Simon sehe, dass sein Frame 24 Zeilen hat, wird die Berechnung nur innerhalb den ersten 10 Zeilen stattfinden oder?

Ab CE 42 bewegt er sich in der zweiten Zeile, ab CE 47 sogar in der 5. und 6.

Zitat:
Bei X und Y ist egal ob ich 0 nehme oder eine andere zahl oder muss ich hier bestimmte Zahlen wählen?

Dein Sprite muss eben in das Bild passen, in das es hineinkopiert wird. Welche Zahlen da genau gebraucht werden, dami es gut aussieht, hängt vom Grundbild und den Sprites ab.

Zitat:
Wie kommst du auf die Zahlen?

Naja, das ist eben Mathematik (oder eher ein bisschen Rechen).
Mod ermittel den Restwert einer Teilung. Also z.B. 27 mod 10 = 7
/ ermittelt den geteilten Wert ohne Nachkommastellen. 27 / 20 = 2

_________________
Bild
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
Offline
Alex
Alex
Beiträge: 19
Alter: 31
 Betreff des Beitrags: Re: Destinyscript
BeitragVerfasst: Fr Apr 01, 2011 17:31 
ok ich glaub ich habs gecheckt. :) Ich werd mich jetzt mal dran setzen und es versuchen, aber eine frage hab ich noch, bevor ich mir mehr arbeit mache als es wert ist. Reicht es wenn ich für jede Richtung von Bewegungen (als nach Links, Rechts, Oben, Unten) eine Berechnung mache und nur eine Frame nutze oder muss ich für jede 4 Richtungen extra machen + 4 Frames pro Richtung?


Nach oben
 Profil  
Mit Zitat antworten  
Offline
Yoji
Yoji
Benutzeravatar
Beiträge: 2590
Alter: 30
Wohnort: Tübingen
 Betreff des Beitrags: Re: Destinyscript
BeitragVerfasst: Fr Apr 01, 2011 20:07 
Prinzipiell reicht eine Berechnung und dementsprechend ein Sprite Sheet.

_________________
Bild
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de