Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

1

Mittwoch, 11. August 2010, 15:08

Nachrichten im Spiel

Hi!
Ich bin jetzt dabei mich mit den Nachrichten bzw Textboxen von den Charakteren/NPCs zu beschäftigen. Dachte das wär ziemlich einfach aber...
Wie macht ihr das denn?

Ich hab zwar eine Möglichkeit allerdings ist die ziemlich umständlich und es gibt da bestimmt ne leichtere Lösung oder vielleicht kennt ihr ne Seite die das anspricht. Ich guck da jetzt auch nochmal selber.

Bisher mach ich das so das ich die Textbox als Bild anzeige und dann mit drawString den Inhalt reinschreibe.
Dann überprüfe ich ob ENTER gedrückt wurde und es kommt sofort das nächste Fenster. Nur muss ich jedesmal nach einem Dialog ein Switch aktivieren um zu nächsten voranzuschreitten. Auch folgen dann die Bilder immer sofot hintereinander es gibt also keine kurze Pause bevor die Textbox auftaucht ich weiss auch noch nicht wie ich das lösen kann.
Nur noch selten hier.

'Til now, I always let people walk all over me!
From now on, if anyone makes fun of me, I'll kill 'em! Just like that!

2

Mittwoch, 11. August 2010, 15:45

So ganz ohne Hintergrundinformationen ist es schwer dir da zu helfen.
Prinzipiell sollte ein Spiel in einer Art Hauptschleife (evtl. auch indirekt über eine wiederholt aufgerufene paint-Methode) ablaufen. In jedem Durchlauf der Hauptschleife wird das Spiel neu gezeichnet. Entsprechend musst du ein Textbox-Objekt vorliegen haben das in jedem Durchlauf gezeichnet wird, sowie eine Benachrichtigung abschicken das eine Textbox gerade abgespielt wird. Andere Prozesse wie z.B. die Bewegung des Helden werden bei einer solchen Benachrichtigung abgeschaltet und erst wieder angeschaltet wenn die Textbox zu ende ist. Die Textbox selbst kann sich den Zeitpunkt merken, an dem sie erzeugt wurde, und diesem Zeitpunkt entsprechend z.B. ihren Transparenzwert festlegen. Auf diese Weise kannst du umsetzen das die Textbox langsam erscheint und später (über einen zweiten Counter der den Beendigungszeitpunkt festhält) langsam wieder verschwindet.

Aber du müsstest schon etwas über deine Implementierung und die verwendete Engine erzählen, damit man dir wirklich weiterhelfen kann.
Bild
RMXP Grundkurs
1 2 3
Ruby/RGSS-Kurs

Bananni

Gesperrter Nutzer

  • »Bananni« wurde gesperrt

Motto: Belive the hype!

  • Nachricht senden

3

Mittwoch, 11. August 2010, 16:41

meine textbox wird erstellt, dann wird der boolean msgBox auf true gesetzt und die Textbox wird gerendered.
nachdem die textbox einmal bestätigt wurde wird der boolean für die bestätigen taste auf false gesetzt, nun wurde das drücken der taste schon mal verbraucht und ein weiteres mal braucht man es dann auch nicht.

Quellcode

1
2
3
4
5
6
7
8
private boolean msgBox = false;
private String[] msgValue;
private Texture msgBoxTexture;
private int countDown;
private void callMsg(String msg){
  msgBox=true;
  msgValue=msg.split("\n");
}

GameLogic

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
public void gameUpdate(){
  if(msgBox){
    if(Input.keyAction){
      Input.keyAction=false; // Verhindere weitere verwendung der taste
      msgBox=false; // MSG aus
      countDown=10; // Warte 10 Frames nach der textbox
    }
  }else  if(countDown == 0){
   //... rest ...
  }else
    countDown--;
}

Rendern

Quellcode

1
2
3
4
5
6
  if(msgBox){
    g.drawImage(msgBoxTexture,x,y,null);
    for(int i=0;i<msgValue.lenght;i++){
      g.drawString(msgValue[i],x,y+i*32); // Kein plan mehr wie das schreiben war aber so inner art wars bestimmt
    }
  }

Deine tastatur-klasse muss dann halt beim loslassen der action taste die action taste auf true setzten.
Bild
My Deviantart : )
Spoiler

StepSound Script:

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
#==================================
# Step Sound Script
#---------------------------------------------------
# @Autor Bananni
# @Date 07/08/2010
#==================================
class Game_Player
  # CONFIGS
  STEP_SOUND_VOLUME = 100
  STEP_SOUND_PITCH = 100
  STEP_SOUND_ARRAY=[
                    ["",0], # TERRAIN ID = 0
                    ["test.wav",10], # TERRAIN ID = 1
                    ["",0], # TERRAIN ID = 2
                    ["",0], # TERRAIN ID = 3
                    ["",0], # TERRAIN ID = 4
                    ["",0], # TERRAIN ID = 5
                    ["",0], # TERRAIN ID = 6
                    ["",0], # TERRAIN ID = 7
                    ["",0], # TERRAIN ID = 8
                    ["",0]  # TERRAIN ID = 9
                   ]
  # ENDE CONFIGS
  alias :increase_steps_banannis_shit :increase_steps
  alias :update_banannis_shit :update
  def increase_steps
    increase_steps_banannis_shit
    if @step_countdown == 0
      id = $game_map.terrain_tag(x, y)
      if STEP_SOUND_ARRAY[id][0] != ""
        Audio.se_play("Audio/SE/" + STEP_SOUND_ARRAY[id][0], STEP_SOUND_VOLUME, STEP_SOUND_PITCH)
        @step_countdown=STEP_SOUND_ARRAY[id][1]
      end
    end
  end
  def update
    update_banannis_shit
    if @step_countdown == nil
      @step_countdown=0
    end
    if @step_countdown != 0
      @step_countdown-=1
    end
  end
end


Map Roots

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
#==================================
# Map Names & Map Root
#---------------------------------------------------
# @Autor Bananni
# @Date 07/08/2010
#---------------------------------------------------
# Get Map Name:
#   $game_system.map_names[any_map_id]
# Get Map Root ID:
#   $game_system.parent_map(any_map_id)
#==================================
class Game_System
  attr_reader :map_names
  alias :wtf_bananni_alias_this_game_system_init :initialize
  def initialize
    wtf_bananni_alias_this_game_system_init
    read_map_names
  end
  def parent_map id=$game_map.map_id
    while true
      par=@map_parent[id]
      break if par == 0
      id=par
    end
    return @map_names[id]
  end
  def read_map_names
    map_infos = load_data("Data/MapInfos.rxdata")
    @map_names = Array.new
    @map_parent = Array.new
    for key in map_infos.keys
      @map_names[key] = map_infos[key].name
      @map_parent[key] = map_infos[key].parent_id
    end
  end
end

zum Lesen den Text mit der Maus markieren

Social Bookmarks