PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vom Message-Befehl unabhängigen Text erstellen



Nibel
11.12.2010, 12:38
Hallo liebe Community,

ich würde gerne per Skript verschiedene Texte anzeigen lassen! Z.B. eine Art Kurzmeldung, die parallel zum Spielgeschehen erscheint, eine Art Text-Log, der unten Links angezeigt wird ähnlich wie in MMOs usw.. Ich kenne mich leider kaum mit dem Skripten aus und verursache Fehler nach Fehler - obwohl es eigentlich recht simpel sein müsste..

Ich wäre über jede Hilfe froh :)

SMWma
11.12.2010, 13:09
MMO?
kA, was das ist ^,^

Allerdings müsstes du bloß eine window erstellen, dass du links unten anzeigen lässt und den Text bloß immer erneuern.
Ist nicht schwer.

Nibel
12.12.2010, 14:26
Danke erstmal für deine Antwort.

Das Problem ist einfach, dass ich mit Ruby kaum umgehen kann und vermutet habe, dass es sicherlich für solche Textausgaben Skripte gibt..
Ich bräuchte einen kleinen Stupser wie ich am Besten anfangen kann, das wär sehr hilfreich..
Ich kann mir zwar vorstellen was du genau meinst, jedoch hab kein Talent dies in die Tat umzusetzen :/

SMWma
12.12.2010, 21:19
hmmm ^,^ Lustigerweiße brauche ich imo so etwas auch ^,^
Jetzt müsste ich bloß noch wissen, was MMO ist. Dann könnte ich dir auch komplett helfen. Ich bin Anpassbar xD
Mach mir am besten, wenn du kannst, ein Screenshot.

Nibel
13.12.2010, 17:28
Momentan sieht das Spiel so aus:

http://i52.tinypic.com/315k9px.png

Und so sollen ca. die Texteinblendungen sein (Größe, Position und Farbe sowie Inhalt habe ich mal so als Beispiel festgelegt):

http://i53.tinypic.com/nq7g5i.png

Wenn eine Aktion auf der Map durchgeführt wird, so wir dies textlich festgehalten. Wenn der Held also Aktion X durchführt, erscheint Satz A. Nach einiger Zeit wird Satz A auch natürlich ausgeblendet - denn wenn der Held einen Gegner erledigt, so ist dies ja 10 Minuten später schon wieder unrelevant.
Wenn der Satz A jedoch noch nicht ausgeblendet wurde und der Held eine weitere Aktion durchführt, so verschiebt sich Satz A eine Zeile nach oben und an der vorherigen Stelle tritt der neue (aktuellere) Satz B. Dies könnte man beliebig oft wiederholen, jedoch wäre ich mit 3-5 Zeilen schon komplett zufrieden.
So ein Textsystem findet man häufig in Online-Rollenspielen wie "World Of Warcraft" usw.. Da ich an einer Art Techdemo arbeite, die den Feuergefecht-Modus von "Halo Reach" (XBOX 360) mit Zombies im Grunde nachstellt, würde ich so eine Textanzeige brauchen für Meldungen wie "Runde beginnt!", "Noch 5 Minuten!" usw..

Ich entschuldige mich schon Mal für meine komplizierten Formulierungen :D
Aber hoffentlich weiß du was ich meine :)

SMWma
16.12.2010, 13:39
heilige Scheiße ^,^ Das klingt nach Arbeit. Ich bin mir nicht sicher, ob ich sowas kann. Aber wer nicht wagt, nicht gewinnt.
Eins kann ich dir versprechen. Das wird viel Arbeit sein xD

Nibel
18.12.2010, 14:12
heilige Scheiße ^,^ Das klingt nach Arbeit. Ich bin mir nicht sicher, ob ich sowas kann. Aber wer nicht wagt, nicht gewinnt.
Eins kann ich dir versprechen. Das wird viel Arbeit sein xD

Ich will dir bloß keine Umstände bereiten! Wenn es so ein Script noch nicht gibt, dann will ich nicht, dass du dir extra Mühe vor'm Rechner machst nur wegen mir, das würde sich irgendwie doof anfühlen.. :/
Ich könnte das ja auch per Pictures und Fork-Conditions machen, nur wär das womöglich auch sehr Perfomance-lastig, oder?

Cornix
19.12.2010, 21:28
Vielleicht willst du einmal etwas tiefer in diesem Thread nachschauen. Ich habe dort ein kleines System entwickelt um eine Textzeile auf dem Bildschirm anzeigen zu lassen.
Nicht sonderlich fähig aber durchaus ausbaubar und einfach zu verwenden.
http://www.multimediaxis.de/threads/128737-Suche-Script-um-Variablen-auf-Bildschirm-auszugeben

Es ist der 12 Beitrag gemeint.

Nibel
22.12.2010, 21:40
Vielleicht willst du einmal etwas tiefer in diesem Thread nachschauen. Ich habe dort ein kleines System entwickelt um eine Textzeile auf dem Bildschirm anzeigen zu lassen.
Nicht sonderlich fähig aber durchaus ausbaubar und einfach zu verwenden.
http://www.multimediaxis.de/threads/128737-Suche-Script-um-Variablen-auf-Bildschirm-auszugeben

Es ist der 12 Beitrag gemeint.

Unglaublich! Genau sowas meine ich! :D

Vielen Dank, das sieht ziemlich gut aus und funktioniert auch prächtig. Ist denn auch eine Art Fading-Funktion enthalten? Bzw. lässt sich das leicht skripten?
Ansonsten bin ich ein Stück weiter und sollte ich je etwas von meinem Projekt veröffentlichen, so kannst du dir sicher sein einen Credits-Eintrag zu kriegen :)

Cornix
22.12.2010, 23:12
Hier ist eine kleine Überarbeitung des Codes, kopiere einfach diesen Code und tausche den vorherigen komplett mit diesem aus.

class Floating_Text < Sprite
#by Cornix

####################
# Important Notes: #
####################
# The Maximum size for texts of the RPG-Maker XP is 96
# If you want shadows and borders to be drawn please keep in mind, that
# the computer needs double the time to draw shadows and fife times the
# time to draw borders of texts. Do not draw too many bordered Floating
# Texts too frequently.
# Floating Texts are standard RPG-Maker XP Sprites and use standard RPG
# -Maker XP Bitmaps and thus all functions of those count for Floating
# Texts as well.

#############################
#Predefined constant colors:#
#############################
# Name = Color.new(Red, Blue, Green, Opacity)
White = Color.new(255, 255, 255, 255)
Black = Color.new( 0, 0, 0, 255) # <- Dont Remove this, its the border color!
Red = Color.new(255, 0, 0, 255)
Green = Color.new( 0, 255, 0, 255)
Blue = Color.new( 0, 0, 255, 255)
Yellow = Color.new(255, 255, 0, 255)
Purple = Color.new(160, 32, 240, 255)
# Visit:
# http://users.rcn.com/giant.interport//COLOR/1ColorSpecifier.html
# for values of all kinds of colors.

################################################
# Setting for the Floating Texts font #
#(This font will be used by all floating texts)#
################################################
Floating_Texts_Font = Font.new
Floating_Texts_Font.name = "Arial"
Floating_Texts_Font.size = 22
Floating_Texts_Font.bold = false
Floating_Texts_Font.italic = false
Floating_Texts_Font.color = White

Draw_Shadow = false
Draw_Border = false

#######################################################
# Initialization #
#(Creates a new floating text at the desired position)#
#######################################################
def initialize(x = 0, y = 0, z = 9999)
super()
self.x = x
self.y = y
self.z = z
# This Bitmap is needed to get the size of the text
self.bitmap = Bitmap.new(1,1)

@opacity = 0.0
@fading = 0
@fade_speed = 0
# Needed when called with custom script lines
return true
end
####################################################################
# Fade- Out / In #
#(Fades the text out if fade_out is true else fades in over frames)#
####################################################################
def set_fading(frames, fade_out = true)
@opacity = self.opacity
if fade_out
@fading = frames
@fade_speed = self.opacity / (frames * 1.0)
else
@fading = -frames
@fade_speed = (255 - self.opacity) / (frames * 1.0)
end
@fading = 0 if @fade_speed == 0
end

def update_fading
return if @fading == 0
if @fading > 0
@fading -= 1
@opacity -= @fade_speed
self.opacity = @opacity
else
@fading += 1
@opacity += @fade_speed
self.opacity = @opacity
end
end
###########################################################
# Set Text to String #
#(Use this function to show a string in the floating text)#
###########################################################
def text_string(text = "")
# Get the size of the text
self.bitmap.font = Floating_Texts_Font
text_size = self.bitmap.text_size(text)
# Remove the old Bitmap
self.bitmap.dispose

# Create a new Bitmap with the proper size
self.bitmap = Bitmap.new(text_size.width, text_size.height)
self.bitmap.font = Floating_Texts_Font.dup

# Draw Borders or Shadow if necessary
if Draw_Border
self.draw_border(text, text_size)
elsif Draw_Shadow
self.draw_shadow(text, text_size)
end

# Draw the Text and show it
self.bitmap.draw_text(text_size,text)
self.src_rect = text_size

# Needed when called with custom script lines
return true
end
#####################################################
# Set Text to Game Variable #
#(Use this function to show a game variable as text)#
#####################################################
def text_var(var_id = 0)
# Convert Game Variable to String
text = $game_variables[var_id].to_s
# Draw Text
self.text_string(text)
end
###############################################
#Draws a black shadow beneath the text #
#(Private funktion, do not call this yourself)#
###############################################
def draw_shadow(text, text_size)
# Set Border-Color to black
self.bitmap.font.color = Black
# Draw text at bottom-right position
self.bitmap.draw_text(1,1,text_size.width,text_size.height,text)
# Reset font color, .dup is needed!
self.bitmap.font.color = Floating_Texts_Font.color
end
###############################################
#Draws a black border around the text #
#(Private funktion, do not call this yourself)#
###############################################
def draw_border(text, text_size)
# Set Border-Color to black
self.bitmap.font.color = Black
# Draw text at top-left position
self.bitmap.draw_text(-1,-1,text_size.width,text_size.height,text)
# Draw text at bottom-left position
self.bitmap.draw_text(1,-1,text_size.width,text_size.height,text)
# Draw text at top-right position
self.bitmap.draw_text(-1,1,text_size.width,text_size.height,text)
# Draw text at bottom-right position
self.bitmap.draw_text(1,1,text_size.width,text_size.height,text)
# Reset font color, .dup is needed!
self.bitmap.font.color = Floating_Texts_Font.color.dup
end
#################################################
# Remove #
#(Use this function to remove the floating text)#
#################################################
def dispose
self.bitmap.dispose
super
return true
end
end
Und so funktioniert das Fading.
Über folgende Funktion aktivierst du das Fading eines Textes:

set_fading(frames, fade_out)]
Diese Funktion nimmt 2 Parameter. Zum einen einen Integer (Ganze Zahl) welche angibt über wie viele Frames der Fading-Vorgang laufen soll, zum anderen einen Boolean (Wahrheitswert) welcher den Fading-Modus angibt. Hierbei steht "true" für "Fade-Out" und "false" für "Fade-In".
Damit das Fading jedoch auch funktionieren kann muss periodisch die Funktion:

update_fadingfür den Text aufgerufen werden.

Die einfachste Methode wäre wohl einfach ein Common_Event als Parallel_Process laufen zu lassen welches folgende Zeile Code jedes Frame ausführt:

$t.update_fadingwobei $t eine Variable ist welche auf unseren Text verweist.

Als Beispiel:
Innerhalb eines Events erstellst du den Text:

$t = Floating_Text.new(320, 240)Dieser Text würde nun $t heißen (das "$" ist wichtig, in Ruby gibt es an, dass es sich hierbei um eine globale Variable handelt!) und sich an der Position x=320, y=240 befinden.
Danach folgt:

$t.text_string("Hallo Welt")Diese Zeile würde den Text "Hallo Welt" schreiben lassen.
Als nächstes das Fading:

$t.set_fading(100, true)Damit sagen wir, dass unser Text einen Fade-Out über 100 Frames machen soll.
Als Merksatz gilt 1.0 Sekunden ist ungefähr 40 Frames, je nach Framerate und Performance des Rechners.

Dann brauchen wir nurnoch ein Common_Event oder normales Event als Parallel_Process welches diese Zeile:

$t.update_fadingaufruft.

Nun haben wir einen Text der einen Fade-Out über 100 Frames vollführt.


Nun zum Fade-In.
Dieser funktioniert im Grunde genauso, allerdings muss der Text ersteinmal eine Opacity besitzen welche ungleich 255 ist damit ein Effekt stattfindet.
Das heißt wir können entweder einen Text welcher vorher einen Fade-Out durchgeführt hatte wieder durch einen Fade-In einblenden, oder wir können einem Text direkt eine gewisse Opacity zuordnen und danach ein Fade-In durchführen.

Um die Opacity manuell zu setzen brauchst du nichts weiter tun als folgende Zeile Custom_Script in ein Event ein zu führen:

$t.opacity = 0Damit würde der Text $t komplett unsichtbar werden.
(Die Opacity eines Sprites bewegt sich im Bereich von 0 (unsichtbar) bis 255 (vollkommen sichtbar). )

Die eingebaute Fading-Funktion macht im Grunde nichts anderes als die Opacity des Textes zu ändern.

Ich hoffe dies sollte geklärt sein, falls immernoch Fragen bestehen zögere nicht sie zu stellen.
Cornix.

Nibel
23.12.2010, 12:37
Funktioniert alles perfekt, vielen Dank :)

Wenn du jetzt noch ein Experte auf dem Gebiet Mode7 wärst, dann wär mein Glück Perfekt :D
Danke trotzdem für das kleine brillante Skript!

Cornix
23.12.2010, 13:14
Leider nicht, Mode 7 ist für mich ein klein wenig zu hoch, ich habe erst vor einem Jahr angefangen mit dem RPG-Maker XP zu arbeiten und ich will es langsam angehen lassen und zunächst nur kleine Scripte erstellen.

Viel Erfolg wünsche ich dir bei deinem Projekt.