• Anmelden

Gmork

Krieger

  • »Gmork« ist der Autor dieses Themas

Motto: Wer nur in die Fußstapfen anderer tritt, hinterlässt keine bleibenden Eindrücke.

  • Nachricht senden

1

Freitag, 28. Dezember 2012, 10:52

Kleines Pause-Skript-Problem

Hallo,

ich würde gerne per Event mit diesem Skript arbeiten, sprich es ausführen und stoppen wie ich will. Das Problem meinerseits ist, dass wenn ich es mit

Quellcode

1
$forced_pause = true
stoppe, mein Common-Event nicht mehr weiterläuft und ich somit das Skript nicht mehr stoppen kann.

Wenn ich es richtig verstanden habe, müsste ich also hier:

Quellcode

1
2
3
4
        when 1
          Graphics.update                   # Update game screen
          Input.update                      # Update input information
        end  

hinzufügen, dass Commonevents weiterlaufen oder besser, dass mein Commonevent (ID 005) weiterläuft. Wie kann ich das umsetzen, bzw welchen Befehl kann ich da nutzen?

Hier ist das Skript
Spoiler

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# Pause Script By IceDragon
# I know its a bit sloppy.
 
 
$pause_button = Input::C # Accept Button (Z, Space, Enter)
$pause_image  = nil # Change this later, to use an image, the image must
                    # be in the Picture Folder  
$pause_mode   = 1   # 0 - Spriteset will also update, 1 - No Spriteset Update
 
$pause_text   = "Paused!"
$dimming_opac = 128
 
 
# Do not edit beyond this point
$forced_pause = false
class Scene_Map < Scene_Base
 
  alias iex_pause_start start unless $@
  def start
    iex_pause_start
    create_pause_sprite
  end
 
  alias iex_pause_terminate terminate unless $@
  def terminate
    iex_pause_terminate
    @pause_sprite.dispose unless @pause_sprite.nil?
    @dimming_sprite.dispose unless @dimming_sprite.nil?
  end
 
  def create_pause_sprite
    @pause_sprite   = Sprite.new
    @dimming_sprite = Sprite.new
    @dimming_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
    rect = Rect.new(0, 0, Graphics.width, Graphics.height)
    color = Color.new(0, 0, 0, 255)
    @dimming_sprite.bitmap.fill_rect(rect, color)
    @dimming_sprite.opacity = 0
    if $pause_image == nil
      @pause_sprite.bitmap = Bitmap.new(320, 56)
      @pause_sprite.bitmap.font.size = 48
      @pause_sprite.bitmap.draw_text(0, 0, 320, 56, $pause_text, 1)
    else
      @pause_sprite.bitmap = Cache.picture($pause_image)
    end  
    @dimming_sprite.x = 0
    @dimming_sprite.y = 0
    @dimming_sprite.z = 9998
    @dimming_sprite.visible = false
 
 
    @pause_sprite.x = (Graphics.width - @pause_sprite.src_rect.width) / 2
    @pause_sprite.y = (Graphics.height - @pause_sprite.src_rect.height) / 2
    @pause_sprite.z = 9999
    @pause_sprite.visible = false
  end
 
  alias iex_pause_update update unless $@
  def update
    create_pause_sprite if @pause_sprite.nil?
    $forced_pause = !$forced_pause if Input.trigger?($pause_button)
    if $forced_pause
      @dimming_sprite.visible = true
      @pause_sprite.visible = true
      loop do
        @dimming_sprite.opacity = [@dimming_sprite.opacity + 5, $dimming_opac].min
        case $pause_mode
        when 0
          Graphics.update                   # Update game screen
          Input.update                      # Update input information
          #$game_map.update                  # Update map
          @spriteset.update                 # Update sprite set
        when 1
          Graphics.update                   # Update game screen
          Input.update                      # Update input information
        end  
        $forced_pause = !$forced_pause if Input.trigger?($pause_button)
        break unless $forced_pause
      end  
    else
      @dimming_sprite.opacity = 0
      @dimming_sprite.visible = false
      @pause_sprite.visible = false
      iex_pause_update
    end  
  end
 
end
zum Lesen den Text mit der Maus markieren


Ich hoffe auf baldige Hilfe,

LG Gmork
  • :puzzle: Aktuelles aus anderen Foren

    Bild
  • Mein Projekt(1.Demo):block:

    Ich arbeite zur Zeit an der Demo meines Projektes "Mosferia".
    Geplant als Erscheinungstermin ist der November 2013.

    Bisher könnt ihr nur einen nicht mehr aktuellen Screen zum Projekt in
    meinem Profil bewundern, aber demnächst werde ich weiteres präsentieren.
  • Meine Ressourcen :palette:

  • Mein Avatar :mask:

    Der Ersteller der ursprünglichen Zeichnung meines aktuellen Avatars:
    Bild

2

Samstag, 29. Dezember 2012, 05:44

Du musst die Common Events updaten. Normalerweise werden die Map Events und Common Events im Update der Game_Map mitgeupdatet, aber da Du ja willst, dass die Map Events pausieren und sich nicht weiter bewegen, musst Du selber etwas schreiben.
Die richtige Codestelle hast Du schon gefunden, dort fügst Du nun ein:

Ruby Quellcode

1
2
3
4
5
6
common_events = $game_map.instance_variable_get(:@common_events)
 
# update every common event
common_events.values.each{|ce| ce.update}
# or update only common event #005
common_events[5].update
Musst Du entscheiden, ob Du alle CEs updaten möchtest, oder nur gezielt bestimmte. Vermutlich ist letzteres das, was Du brauchst.

Allerdings, da das der Talkbereich ist, möchte ich anmerken, dass dein Skript (hauptsächlich auf Grund der globalen Variablen) nicht besonders schön geschrieben ist.

Gmork

Krieger

  • »Gmork« ist der Autor dieses Themas

Motto: Wer nur in die Fußstapfen anderer tritt, hinterlässt keine bleibenden Eindrücke.

  • Nachricht senden

3

Montag, 31. Dezember 2012, 13:04

Zitat

Allerdings, da das der Talkbereich ist, möchte ich anmerken, dass dein Skript (hauptsächlich auf Grund der globalen Variablen) nicht besonders schön geschrieben ist.

Naja, ich habe das Skript nicht selbst geschrieben und es war das Einzige, was ich gefunden habe.


Danke erst einmal für deine Antwort, :thumbsup: aber jetzt habe ich folgendes Problem: Die Befehle werden eventuell ausgeführt, aber da der Inhalt der Befehle ja nicht geupdatet wird, passiert trotzdem nichts.
Wie kann ich jetzt Auswahlboxen und Bilder updaten? Denn diese Befehle werden ja wieder gestoppt...

MfG Gmork


Edit

Ich habe nach deinem Beispiel einmal das Ganze mit der Klasse Screen probiert, die ja die Funktionen für die Bilder beinhaltet:

Quellcode

1
2
screen_state = $game_map.instance_variable_get(:@screen)    
screen_state.update


Es wird kein Fehler ausgeschmissen, aber die Bilder werden nach dem Beginn der Pause trotzdem nicht angezeigt. :schock:


Edit

*Push*
  • :puzzle: Aktuelles aus anderen Foren

    Bild
  • Mein Projekt(1.Demo):block:

    Ich arbeite zur Zeit an der Demo meines Projektes "Mosferia".
    Geplant als Erscheinungstermin ist der November 2013.

    Bisher könnt ihr nur einen nicht mehr aktuellen Screen zum Projekt in
    meinem Profil bewundern, aber demnächst werde ich weiteres präsentieren.
  • Meine Ressourcen :palette:

  • Mein Avatar :mask:

    Der Ersteller der ursprünglichen Zeichnung meines aktuellen Avatars:
    Bild

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Gmork« (31. Dezember 2012, 13:04)


4

Montag, 31. Dezember 2012, 14:58

Ich habe für dich ein Simples Pausen-Script erstellt.
Es lässt sich sehr leicht bedienen.Ich stelle dir einmal das Script ein und eine Demo dazu.

Pause-Script :
Spoiler

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#################### 	Pause Script  	####################
 
class Scene_Pause
def main
@spriteset = Spriteset_Map.new
@sprite = Sprite.new
@sprite.bitmap = Cache.picture("Pause") # Hier fügst du dein Picture Name ein.
@sprite.opacity = 255 # Hier stellst du die Transparenz ein.
@sprite.x = 220 # Hier stellst du die Position des Bildes von Links nach Rechts ein.
@sprite.y = 150 # Hier stellst du die Position des Bildes von Oben nach Unten ein.
@sprite.z = 100 # Hier stellst du die Priorität des Bildes ein.
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
end
end
def update
if Input.trigger?(Input::X) # Unterbrechung mit der A Taste
$data_system.sounds[2].play
$scene = Scene_Map.new
Graphics.freeze
@sprite.dispose
@spriteset.dispose
$game_map.need_refresh = true 
end
end
zum Lesen den Text mit der Maus markieren

Aufrufen kannst du das Script mit : $scene = Scene_Pause.new

Demo :
Pause-Script.rar

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

Gmork

Krieger

  • »Gmork« ist der Autor dieses Themas

Motto: Wer nur in die Fußstapfen anderer tritt, hinterlässt keine bleibenden Eindrücke.

  • Nachricht senden

5

Sonntag, 13. Januar 2013, 18:35

Hi Asandril,

sry für die späte Antwort. Ich wollte es erst noch weiter mit dem ersteren Skript versuchen. Leider erfüllt dein Skript genausowenig
die Anforderungen wie das gepostete. Ich möchte gerne 3 Bilder anzeigen lassen (druch ein Common-Event bestimmt), das Commonevent 5
trotz der Pause weiterlaufen lassen und im Commonevent eine Auswahl aufrufen, die ich weiter nutzen kann...

Kannst du das Skript irgendwie abändern, dass das geht? Ich wäre dir sehr verbunden, Credits sind natürlich selbstverständlich,

LG Gmork

PS: Wer auch immer das Thema als erledigt gesetzt hat, es ist eigentlich noch nicht erledigt...
  • :puzzle: Aktuelles aus anderen Foren

    Bild
  • Mein Projekt(1.Demo):block:

    Ich arbeite zur Zeit an der Demo meines Projektes "Mosferia".
    Geplant als Erscheinungstermin ist der November 2013.

    Bisher könnt ihr nur einen nicht mehr aktuellen Screen zum Projekt in
    meinem Profil bewundern, aber demnächst werde ich weiteres präsentieren.
  • Meine Ressourcen :palette:

  • Mein Avatar :mask:

    Der Ersteller der ursprünglichen Zeichnung meines aktuellen Avatars:
    Bild

Gmork

Krieger

  • »Gmork« ist der Autor dieses Themas

Motto: Wer nur in die Fußstapfen anderer tritt, hinterlässt keine bleibenden Eindrücke.

  • Nachricht senden

6

Mittwoch, 16. Januar 2013, 20:48

*Push*
  • :puzzle: Aktuelles aus anderen Foren

    Bild
  • Mein Projekt(1.Demo):block:

    Ich arbeite zur Zeit an der Demo meines Projektes "Mosferia".
    Geplant als Erscheinungstermin ist der November 2013.

    Bisher könnt ihr nur einen nicht mehr aktuellen Screen zum Projekt in
    meinem Profil bewundern, aber demnächst werde ich weiteres präsentieren.
  • Meine Ressourcen :palette:

  • Mein Avatar :mask:

    Der Ersteller der ursprünglichen Zeichnung meines aktuellen Avatars:
    Bild

Yuri

Ankömmling

Motto: Ein Kluger Mann findet immer Zeit für Dummheiten

  • Nachricht senden

7

Donnerstag, 17. Januar 2013, 14:08

OK, also kurze Verständnisfrage:
Du willst ein Pause-Script, das alles andere anhält, bis auf das Common Event 005 und dessen Inhalte?

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Pause Script By IceDragon
# I know its a bit sloppy.
 
 
$pause_button = Input::C # Accept Button (Z, Space, Enter)
$pause_image  = nil # Change this later, to use an image, the image must
                    # be in the Picture Folder  
$pause_mode   = 1   # 0 - Spriteset will also update, 1 - No Spriteset Update
 
$pause_text   = "Paused!"
$dimming_opac = 128
 
 
# Do not edit beyond this point
$forced_pause = false
class Scene_Map < Scene_Base
 
  alias iex_pause_start start unless $@
  def start
    iex_pause_start
    create_pause_sprite
  end
 
  alias iex_pause_terminate terminate unless $@
  def terminate
    iex_pause_terminate
    @pause_sprite.dispose unless @pause_sprite.nil?
    @dimming_sprite.dispose unless @dimming_sprite.nil?
  end
 
  def create_pause_sprite
    @pause_sprite   = Sprite.new
    @dimming_sprite = Sprite.new
    @dimming_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
    rect = Rect.new(0, 0, Graphics.width, Graphics.height)
    color = Color.new(0, 0, 0, 255)
    @dimming_sprite.bitmap.fill_rect(rect, color)
    @dimming_sprite.opacity = 0
    if $pause_image == nil
      @pause_sprite.bitmap = Bitmap.new(320, 56)
      @pause_sprite.bitmap.font.size = 48
      @pause_sprite.bitmap.draw_text(0, 0, 320, 56, $pause_text, 1)
    else
      @pause_sprite.bitmap = Cache.picture($pause_image)
    end  
    @dimming_sprite.x = 0
    @dimming_sprite.y = 0
    @dimming_sprite.z = 9998
    @dimming_sprite.visible = false
 
 
    @pause_sprite.x = (Graphics.width - @pause_sprite.src_rect.width) / 2
    @pause_sprite.y = (Graphics.height - @pause_sprite.src_rect.height) / 2
    @pause_sprite.z = 9999
    @pause_sprite.visible = false
  end
 
  alias iex_pause_update update unless $@
  def update
    create_pause_sprite if @pause_sprite.nil?
    $forced_pause = !$forced_pause if Input.trigger?($pause_button)
    if $forced_pause
      @dimming_sprite.visible = true
      @pause_sprite.visible = true
      loop do
        @dimming_sprite.opacity = [@dimming_sprite.opacity + 5, $dimming_opac].min
        case $pause_mode
        when 0
          Graphics.update                   # Update game screen
          Input.update                      # Update input information
          #$game_map.update                  # Update map
          @spriteset.update                 # Update sprite set
        when 1
          Graphics.update                   # Update game screen
          Input.update                      # Update input information
 
          $game_map.update_events
          $game_map.interpreter.update      # Update interpreter
          @message_window.update            # Update message window
          unless $game_message.visible      # Unless displaying a message
            update_transfer_player
            update_encounter
            update_call_menu
            update_call_debug
            update_scene_change
          end
        end
 
        $forced_pause = !$forced_pause if Input.trigger?($pause_button)
        break unless $forced_pause
      end  
    else
      @dimming_sprite.opacity = 0
      @dimming_sprite.visible = false
      @pause_sprite.visible = false
      iex_pause_update
    end
  end
 
end


Spriteset sollte stoppen, game_map updated aber weiter die Events und Message Boxen (müsstest noch den z-index anpassen, damit die Window Boxen über dem Sprite-Layer angezeigt werden.
Auf deiner Map läuft dann ein Event als parallel process und ner abfrage: true == $forced_pause -> dann nen switch deiner wahl auf on setzen, welcher dein common event (ebenfalls parallel process) benötigt.

Jetzt laufen wohl aber alle Events weiter auf der Map. Da müsstest du evtl. ne Abfrage einbauen, ob Pause ist oder nicht - und nur, wenn nicht, diese laufen lassen.
Ich weiß, ist doof, aber ich wüsst aus dem Kopf gerade keinen anderen Weg, wie man solch einen Fall abdecken könnte

Ähnliche Themen

Social Bookmarks