• Anmelden

1

Montag, 20. Dezember 2010, 01:11

Cursor über das HUD-Fenster anzeigen lassen

Hallo zusammen.

Ich habe folgendes Problem.
Wenn ich in meinem Projekt mit meinem Cursor über die Map scrolle und dabei auf ein HUD-Fenster komme, wird der Cursor
unter dem Fenster angezeigt.Ich möchte das ganze aber so haben, dass der Cursor über dem Fenster angezeigt wird.
Ich habe 2 beispiele als Bilder eingestellt.
Das erste Bild zeigt, wie es gerade bei meinem Projekt aussieht.(Der Cursor wurde von mir Rot eingekreist)
Das zweite Bild zeigt, wie ich mir das ganze vorstelle.

Attachment 14730
Attachment 14731

Ich hoffe jemand kann mir dabei helfen.

MFG
Realität ist auch nur eine Art von Rollenspiel.

2

Montag, 20. Dezember 2010, 02:46

Jede Grafik hat einen z Wert, der die Zeichenreihenfolge bestimmt. Wenn das HUD-Fenster einen höheren z-Wert hat als der Cursor, so wird der Cursor dahinter angezeigt. Fenster (die von Window_Base erben) haben immer den z-Wert 100. Du musst den Z-Wert deines Cursors also nur entsprechend erhöhen.

Ruby Quellcode

1
mein_cursor.z = 200


Neben dem z-Wert ist auch noch der Viewport entscheidend. Jede Grafik wird in einem Viewport angezeigt, der selbst wiederum einen z-Wert hat. Werden zwei Grafiken in verschiedenen Viewports angezeigt, so entscheidet der z-Wert der Viewports, nicht der der Grafiken. Wenn also das Verstellen des z-Werts nicht funktioniert, dann liegt dein Cursor evtl. in einem Viewport, der hinter den Fenstern angezeigt wird.

(Die beiden Screens sehen btw. ziemlich stylisch aus =D)
Bild
RMXP Grundkurs
1 2 3
Ruby/RGSS-Kurs

3

Montag, 20. Dezember 2010, 12:59

Danke für die Ausführliche erklärung Kai.
Jetzt frage ich mich gerade nur :
Wo kann ich den z Wert bzw Viewport von meinem Cursor erhöhen.(Der Cursor ist der erste Actor in der Database)
Leider habe ich immer noch nicht so viel ahnung vom ganzen.
Könntest du mir das ganze auch Schritt für Schritt erklären?
Oder falls es dafür schon ein Tutorial gibt, auf die Seite verweisen?

Danke für die Geduld

MFG
Realität ist auch nur eine Art von Rollenspiel.

agenty

Knappe

Motto: wenn du fragen hast dann frag, versuche aber so zu fragen, dass man dich versteht.

  • Nachricht senden

4

Montag, 20. Dezember 2010, 18:08

Das heisst im Klartext, dein Cursor is ein Actor und kein Cursor aus einem Mausscript?
Wenn ja, dann versuch mal ob du in dem move_route event-befehl sowas findest wie "allways on Top",
wenn das auch nich funktioniert, dann musst du die entsprechenden scripts durchschaun, ich weis jetzt auch
nicht in welchem das genau is, ich würde aber mal in game_actor und scene_map schaun, ich weis jetzt leider
gerade nich auswendig welche Klasse aus dem RGSS für die grafische darstellung des Helden da is, aber eigentlich
müsste in scene_map ne Instanz dazu da sein, wenn auch etwas verschachtelt.

gruß agy
Bild

Spoiler: Evreys epic shoutbox fail XD (30.11.09)
(21:40:17) Evrey: 7kick agenty 65536 òÓ ketzer!!!
zum Lesen den Text mit der Maus markieren

Spoiler: epic win ^-^
(20:35:45) JustSid schenkt agenty ein lila Nilpferd
zum Lesen den Text mit der Maus markieren

5

Montag, 20. Dezember 2010, 20:47

Der Held gehört zum Viewport der Map und wird daher auf derselben Höhe wie die Map angezeigt. Und die wird unter den Fenstern angezeigt - sonst würdest du die Fenster gar nicht sehen können. Was du machen kannst, ist den Helden auf einen höheren Viewport zu versetzen. Dafür musst du die Zeile

Ruby Quellcode

1
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))

in Spriteset_Map durch die Zeile

Ruby Quellcode

1
@character_sprites.push(Sprite_Character.new(@viewport2, $game_player))

ersetzen. Dann liegt der Held im selben Viewport wie die Pictures und wird daher über den einfachen Fenstern angezeigt.

Ausnahme: MessageFenster, die liegen so ziemlich über allen. Wenn der Held auch über den MessageFenstern liegen soll, so musst du schreiben:

Ruby Quellcode

1
2
3
player = Sprite_Character.new(nil, $game_player)
player.z = 10_000
@character_sprites.push(player)


Allerdings haben all diese Eingriffe weitere Auswirkungen: So funktionieren manche Befehle wie das Flashen des Heldencharacters u.ä. nicht mehr. Wenn du dich etwas mit Ruby auskennst, würde ich eher dazu raten eine eigene Cursor-Klasse zu schreiben (und evtl. noch mit einem Mausscript zu verbinden, damit die Bedienung etwas komfortabler wird).
Bild
RMXP Grundkurs
1 2 3
Ruby/RGSS-Kurs

agenty

Knappe

Motto: wenn du fragen hast dann frag, versuche aber so zu fragen, dass man dich versteht.

  • Nachricht senden

6

Montag, 20. Dezember 2010, 22:11

naja, maus-scripts mit cursor gibt es ja zu genüge, also warum das rad neu erfinden ^^'
aber mir wären da die ganzen koordinaten-abfragen zu stressig, ich mach das eig.
nur in menüs ^^' (vor allem bei dem was ich den screens entnehme, da wären die
ganzen range-abfragen ja ein fürchterliches gefiesel ^^')
und nachdem das ja momentan weitestgehend mit events gelöst zu sein scheint
denke ich mal, dass es eine komplett-umstellung wäre ^^

wie dem auch sei, in einem punkt muss ich ka(m)i recht geben, für den spieler
wäre maussteuerung wahrscheinlich die angenehmste lösung ^^
schau einfach mal in itzamna rein, evtl. findeste ja n script, dass das macht,
was du dir vorstellst.

gruß agy
Bild

Spoiler: Evreys epic shoutbox fail XD (30.11.09)
(21:40:17) Evrey: 7kick agenty 65536 òÓ ketzer!!!
zum Lesen den Text mit der Maus markieren

Spoiler: epic win ^-^
(20:35:45) JustSid schenkt agenty ein lila Nilpferd
zum Lesen den Text mit der Maus markieren

7

Montag, 20. Dezember 2010, 22:44

Naja, es wäre, denke ich, nicht ein so großer Aufwand das Mausscript so zu schreiben, dass auch Events per Mausklick aktiviert werden können. Dann kann das gegenwärtige System sogar beibehalten werden.
evtl. gibt es sogar schon Mausscripte, die das so handhaben.
Bild
RMXP Grundkurs
1 2 3
Ruby/RGSS-Kurs

agenty

Knappe

Motto: wenn du fragen hast dann frag, versuche aber so zu fragen, dass man dich versteht.

  • Nachricht senden

8

Montag, 20. Dezember 2010, 22:59

hmmm... müsste das maus-script dann nicht in jeder main-iteration prüfen ob sich das maus_rect mit einem von allen ranges aller event-rects (position...width/height) schneidet?
in meinen augen wäre das massiev inperformant ._. vor allem: je mehr events desto mehr geht dann die performance in keller ._.
Bild

Spoiler: Evreys epic shoutbox fail XD (30.11.09)
(21:40:17) Evrey: 7kick agenty 65536 òÓ ketzer!!!
zum Lesen den Text mit der Maus markieren

Spoiler: epic win ^-^
(20:35:45) JustSid schenkt agenty ein lila Nilpferd
zum Lesen den Text mit der Maus markieren

9

Montag, 20. Dezember 2010, 23:16

Erst einmal danke für das Interesse an meinem Problem.
Kai dein Tip in Post 5 hat mein Problem gelöst.Vielen Dank.Klappt alles wunderbar
Ich hatte auch erst überlegt eine Maussteuerung einzubauen.Da ich aber nicht großartig Plan davon hatte, habe
ich es gleich wieder verworfen.Das Spiel sollte sich eigentlich auch mit einem Gamepad gut steuern lassen.(Habe es auch schon ausprobiert)

Nochmals vielen Dank an Agenty und Kai für eure Tipps.

MFG
Realität ist auch nur eine Art von Rollenspiel.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Asandril« (21. Dezember 2010, 09:33)


agenty

Knappe

Motto: wenn du fragen hast dann frag, versuche aber so zu fragen, dass man dich versteht.

  • Nachricht senden

10

Montag, 20. Dezember 2010, 23:19

keine ursache, aber ich hab nicht viel getan ^^' wie immer war unser programmier-lexikon ka(m)i die lösung auf die frage ^^' :thumbsup:
Bild

Spoiler: Evreys epic shoutbox fail XD (30.11.09)
(21:40:17) Evrey: 7kick agenty 65536 òÓ ketzer!!!
zum Lesen den Text mit der Maus markieren

Spoiler: epic win ^-^
(20:35:45) JustSid schenkt agenty ein lila Nilpferd
zum Lesen den Text mit der Maus markieren

11

Dienstag, 21. Dezember 2010, 17:02

Zitat

hmmm... müsste das maus-script dann nicht in jeder main-iteration prüfen ob sich das maus_rect mit einem von allen ranges aller event-rects (position...width/height) schneidet?
in meinen augen wäre das massiev inperformant ._. vor allem: je mehr events desto mehr geht dann die performance in keller ._.

Du packst einfach alle Events, die sich innerhalb des Bildschirms befinden, in einen Array und iterierst nur noch über diesen Array. Immer wenn ein Event sich bewegt (was ja nur alle paar Frames passiert) muss es selbst prüfen, ob es den Bildschirm verlässt oder nicht. Noch effizienter geht es, wenn du die Events in eine Art Gitternetz fallen lässt, so dass du in konstanter Zeit prüfen kannst, welche Events in welchem Quadrat der Map stehen. Dann brauchst du nur noch ein Quadrat (was z.B. aus 4*4 Feldern bestehen könnte) abfragen.
Also ein ähnliches Prinzip wie die Anti-Lag Scripte. Ließe sich auch mit einem davon kombinieren.
Bild
RMXP Grundkurs
1 2 3
Ruby/RGSS-Kurs

agenty

Knappe

Motto: wenn du fragen hast dann frag, versuche aber so zu fragen, dass man dich versteht.

  • Nachricht senden

12

Dienstag, 21. Dezember 2010, 23:40

ja, aber das wäre für meinen geschmack ein epischer aufwand ^^' potentiell gibt es in der programmierung schier unendlich viele möglichkeiten jedes problem zu lösen, blos nutze-aufwand mit einberechnet...

in dem fall würde ich einfach sagen, es wäre ideal generell von events weg zu gehn und es komplett zu schreiben, das wäre in meinen augen die beste lösung.

gruß agy
Bild

Spoiler: Evreys epic shoutbox fail XD (30.11.09)
(21:40:17) Evrey: 7kick agenty 65536 òÓ ketzer!!!
zum Lesen den Text mit der Maus markieren

Spoiler: epic win ^-^
(20:35:45) JustSid schenkt agenty ein lila Nilpferd
zum Lesen den Text mit der Maus markieren

13

Mittwoch, 22. Dezember 2010, 16:07

ja, aber das wäre für meinen geschmack ein epischer aufwand ^^'

In Aborakon wird so ein System auch genutzt. Der Aufwand hält sich da eigentlich sehr in Grenzen. Es sind nur die moveto, move_up, move_down etc. Methoden in Game_Character, die überschrieben werden müssen. Das Gitternetz ist dann einfach ein Array, dessen Index sich aus (mapbreite * y + x)/blockgröße berechnet. Ich find nicht, dass das mehr Aufwand ist als ein eigenes Point&Click-System zu schreiben. Immerhin könnte er danach seinen Eventcode beibehalten.
Bild
RMXP Grundkurs
1 2 3
Ruby/RGSS-Kurs

agenty

Knappe

Motto: wenn du fragen hast dann frag, versuche aber so zu fragen, dass man dich versteht.

  • Nachricht senden

14

Mittwoch, 22. Dezember 2010, 20:41

ich denke, bevor wir noch länger off-topic bleiben resigniere ich hier an dieser stelle besser ^^'
du bist eh der bessere programmierer von uns beiden und früher mein ruby-mentor gewesen ^^'
dann sag ich danke für deine bemühungen und deine belehrungen ^^

gruß agy
Bild

Spoiler: Evreys epic shoutbox fail XD (30.11.09)
(21:40:17) Evrey: 7kick agenty 65536 òÓ ketzer!!!
zum Lesen den Text mit der Maus markieren

Spoiler: epic win ^-^
(20:35:45) JustSid schenkt agenty ein lila Nilpferd
zum Lesen den Text mit der Maus markieren

Social Bookmarks