PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wechseln der Font beim xp?



Phantom of Kami
14.12.2006, 11:16
Guten morgen allerseits,

Ich habe ein Problem mit meinem Zelda-Spiel auf dem rmxp: Ich will die Font wechseln.
Ein Script dafür habe ich auch bereits gefunden aber das funktioniert irgendwie nicht (die schrift ist einfach weg wenn ich es einsetze).

Auch bekomme ich eine Fehlermeldung ("undefined method main for scene_title") wenn ich das Script vor scene_title stelle weswegen ich es momentan direkt darunter in einem neuen script eingefügt habe.


Nun meine Fragen:

-Könnte es sein dass das daran liegt dass ich Windows98 nutze?
-Findet ihr einen Fehler im Script?
-Könnte es daran liegen dass das Script mit anderen Scripts von mir (z.B: dubealex´AMS) interferriert?

Und ganz wichtig:
-Kennt ihr ein anderes Script zum Wechseln der Font?


Hier das Script:

module Fonts

# filenames of fonts to be in stalled
Filenames = ['ReturnofGanon.ttf']
# e.g. Filenames = ['carbono_pw.ttf','FUTRFW.TTF']

# names (not filenames) of fonts to be installed
Names = ['Return of Ganon']
# e.g. Names = ['carbono', 'Futurist Fixed-width']

# whether to notify player (via pop-up message) that fonts were installed
Notify = false

# location of fonts (relative to game folder)
Source = 'Graphics/Windowskins/'

# location of fonts after installation
#print ENV['Windir'], ENV['SystemRoot']
Dest = ENV['Windir'] + '\Fonts\\'


end

class Scene_Title

AFR = Win32API.new('gdi32', 'AddFontResource', ['P'], 'L')
WPS = Win32API.new('kernel32', 'WriteProfileString', ['P'] * 3, 'L')
SM = Win32API.new('user32', 'SendMessage', ['L'] * 4, 'L')
WM_FONTCHANGE = 0x001D
HWND_BROADCAST = 0xffff

alias wachunga_autofontinstall_st_main main
def main
success = []

for i in 0...Fonts::Filenames.size
f = Fonts::Filenames[i]
# check if already installed...
if not FileTest.exists?(Fonts::Dest + f)

# check to ensure font is in specified location...
if FileTest.exists?(Fonts::Source + f)
# move file to fonts folder
File.rename(Fonts::Source + f, Fonts::Dest + f)
# add font resource
AFR.call(Fonts::Dest + f)
# add entry to win.ini/registry
WPS.call('Fonts', Fonts::Names[i] + ' (TrueType)', f)
SM.call(HWND_BROADCAST,WM_FONTCHANGE,0,0)
if FileTest.exists?(Fonts::Dest + f)
success.push(Fonts::Names[i])
else
p 'Auto Font Install: failed to install' + Fonts::Names[i] + '.'
end
else
p 'Auto Font Install: font ' + f + ' not found.'
end

end
end

if success != [] # one or more fonts successfully installed
if Fonts::Notify
fonts = ''
success.each do |f|
fonts << f << ', '
end
p 'Auto Font Install: sucessfully installed ' + fonts[0..-3]
end
# new fonts aren't recognized in RMXP until the program is
# restarted, so this is (unfortunately) necessary
a = Thread.new { system('Game') }
exit
end
wachunga_autofontinstall_st_main
end

end

MagicMagor
14.12.2006, 12:16
Was genau willst du machen, während dem Spiel die Schriftart ändern, oder eine mitgelieferte Font-Datei benutzen?

Das Skript macht weiter nichts als eine Font-Datei zu installieren, damit der Benutzer das nicht machen muss, wenn du diese Schriftart benutzen willst.

Nur musst du natürlich dem Spiel auch sagen, daß es die Schriftart benutzen soll.



Font.default_name = "Arial"

Damit änderst du die Standardschriftart, die alle Fenster benutzen sobald sie erstellt werden. Du kannst jede Schriftart benutzen, die auf dem System installiert ist. In Verbindung mit obigen Script kannst du dann auch eine eigene Schriftart mitliefern, das obige Skript installiert diese dann und du kannst sie verwenden.
Solange du aber den default_name nicht änderst, ändert sich auch keine Schriftart.

FF
14.12.2006, 18:01
bloedsinn??
Wieso einfach, wenns auch kompilzert geht.
die schriftdatei die das spiel benutz bei veröffendlichung dem spiel beipacken, in die readme schreiben, das die installiert werden soll.

damit im spiel anders ist, siehe magor.
wofür son script schreiben, wenn man das probkemlos auch selbst installieren kann? o.O

Phantom of Kami
15.12.2006, 01:15
Jep, ich will lediglich dass die Schriftart von Anfang an die Zelda-Schriftart ist.


wofür son script schreiben, wenn man das probkemlos auch selbst installieren kann? o.O
Weil Selbstinstallieren wahnsinnig unkomfortabel für den Spieler ist:
Wenn es mit dem xp besser geht würd ich gerne eine sauberere Lösung anbieten als die Font zusätzlich zu installieren...


Und was Magors Vorschlag angeht:

Im main-script habe ich folgende Zeilen stehen
(aber trotzdem wird keine schrift angezeigt!):



Font.default_name = "Return of Ganon"
$fontface = "font.default_name" $fontsize = 30

Kelven
15.12.2006, 09:25
Hast du überprüft, ob die Schriftart auch exakt so heißt wie sie dort steht?

MagicMagor
15.12.2006, 10:23
Nur drei Sachen:
Erstens, Ruby unterscheidet Groß- und Kleinschreibung "Font.default_name" ist etwas anderes als "font.default_name"
Zweitens ist "font.default_name" mit Sicherheit keine Schriftart.
Drittens, das wichtigste, du benutzt sehr wahrscheinlich eine illegale XP-Version, bzw viele deiner Scripte entstammen aus diesen.
Also entweder besorgst du dir, falls du sie noch nicht hast, die legale Version (www.rpg-makerxp.com), oder falls du sie bereits hast, repariere alle Window-Skripte, indem du sie mit dem Code aus einem frischen Projekt überschreibst. Die neuste Version des AMS sollte für die legale Version gemacht sein.

Phantom of Kami
15.12.2006, 11:01
edit: sorry, hab magors letzten Post übersehen: Ja ich habe das Spiel auf einer illegalen Version des Makers angefangen aber die Scripte nun einfach so zu überschreiben ist leichter gesagt als getan weil ich ziemlich viel in den Scripts rumgeschrieben habe...
deinen zweiten Tipp verstehe ich nicht: wieso ist Font.default name keine Schriftart? bzw was sollte ich anders schreiben damit es Sinn gibt?

Hab gerade nochmal nachgeschaut um definitiv sagen zu können:
Im "Windowskins"-Ordner befindet sich die Schriftart namens "ReturnofGanon.ttf"

Fällt euch noch etwas ein an dem es liegen könnte dass ich trotzdem keine Schrift sehe? (Ich könnte euch auch meine Scripts.rxdata schicken denn ich bin was Scripten angeht wirklich alles andere als ein Fortgeschrittener und schließe dumme Anfängerfehler nicht aus :\)

Eine Lösung in dieser Sache wäre mir wirklich sehr wichtig weil ohne Zelda-Font ist es kein Zelda-Spiel :'(

Kelven
15.12.2006, 11:17
Im Grunde reicht das was MagicMagor in seinem ersten Posting geschrieben hat schon aus:


Font.default_name = "Arial"

Ich hab's testweise direkt nach Main ins Script eingefügt und es hat ohne Probleme funktioniert. Font.default_name ist eine Klasseneigenschaft von Font, der man wie oben im Code gezeigt wird den Namen einer Schriftart zuweisen kann. Du müßtest also wenn dann bei fontface den Namen der Schriftart hinschreiben.

Generell würde ich (das ist aber nur meine Meinung) so ein Autoinstallationsscript nicht benutzen. Ich als Spieler würde es nicht toll finden wenn etwas ohne mein Wissen auf dem Rechner installiert wird und sei es nur eine Schriftart. Man kann den Spieler auch per Nachricht im Spiel sagen, dass eine spezielle Schriftart nötig ist (und evtl. Systemschriftarten als Alternative einbauen).

Phantom of Kami
15.12.2006, 12:02
Okay, das mit dem Font.default_name hab ich mittlerweile glaube ich verstanden (Danke erstmal hierfür ^^).

Und Arial funktioniert damit auch wunderbar.
Aber wenn ich "Return of Ganon" statt "Arial" nehme, sehe ich keine Schrift mehr.
BEIDE Schriftarten sind aber in meinem Font-Ordner installiert:

C:\windows\fonts

Und jetzt kommt -wie ich soeben rausgefunden und ausgiebig herumprobiert habe- der Hammer:
Wenn ich die Schriftart im Hintergrund geöffnet habe bevor ich das testgame starte funktioniert es!!!
(Wenn ich die schriftart öffne nachdem ich das Spiel gestartet habe und dann via f12 neustarte bleibt die schrift übrigens weg, genau wie wenn ich das spiel starte und die schriftart nicht geöffnet habe)

Kann sich das jemand erklären?



P.S. Ich sehe übigens ein -auch hier Danke für den Einwand- dass man nicht so einfach in der registry von unwissenden Spielern rumpfuschen sollte weswegen ich auch -sofern das Script mal so klappt wie ich das will- dem Spieler bei Spielbeginn (sofern die Font noch nicht vorhanden ist) die Wahl geben will, ob er die Schriftart automatische installieren oder lieber in Arial spielen will...

MagicMagor
15.12.2006, 14:42
Ok, kurz noch zur Ergänzung:


Font.default_name # Das ist eine Variable, die optimalerweise den Namen der Schriftart als String abspeichert
"Font.default_name" # Das ist ein String der den Namen der Variable enthält, aber nicht den Inhalt der Variable. Dieser String bezeichnet also keine Schriftart.
# Um den Inhalt von Variablen in konstanten Strings zu erhalten gibt es das #{} Konstrukt.
"Die gewählte Schriftart ist #{Font.default_name}"
# Dies würde zB wenn die aktuelle Schriftart Arial ist, folgenden String erzeugen:
"Die gewählte Schriftart ist Arial"
# Anmerkung die Ersetzung dieses Konstrukt findet nur in konstanten Strings statt die mit doppeltem Hochkomma eingeschloßen sind. In einfachen Hochkommas findet diese Ersetzung nicht statt (weswegen die Verarbeitung von Strings mit einfachem Hochkomma leicht schneller ist).


Wegen der "Reperatur" der Windows-Skripte:
In deiner illegalen Version werden Schriftart und Schriftgröße aus zwei globalen Variablen gelesen ($fontface und $fontsize), in der legalen Version werden diese Variablen nicht gefüllt und die Daten werden aus den Klassenvariablen "Font.default_name" und "Font.default_size" gelesen.
Zum Reparieren durchsuchst du alle Window-Skripte nach folgenden Zeilen

self.contents.font.name = $fontface

self.contents.font.size = $fontsize
Wenn du diese Zeilen findest, lösche sie.

Was dein Problem mit der neu installierten Schriftart angeht kann ich dir leider auch nicht helfen. Hast du mal versucht nach dem Installieren des Fonts den Rechner neu zu starten? Eventuell liegt es daran, daß du Win98 hast, aber genau kann ich dir da leider auch nichts sagen.

Was du machen kannst ist die Schriftart folgendermaßen festzulegen:

Font.default_name = ["Return of Ganon", "Arial"]
Das Spiel wird versuchen die erste Schriftart im Array zu laden, sollte sie diese nicht vorfinden, wird sie die nächste versuchen zu laden. So kannst du sicherstellen, daß die Leute die "Return of Ganon" installiert haben, diese Schriftart auch zu sehen bekommen, die Leute ohne diese Schriftart aber dennoch Text zu sehen bekommen.

Phantom of Kami
15.12.2006, 16:12
Wenn du diese Zeilen findest, lösche sie.
Danke. Ich hatte die Zeilen zwar schon gelöscht aber den Befehl in main stehen lassen :o


Font.default_name = ["Return of Ganon", "Arial"]
Super Sache, vielen Dank.
Der Befehl ist klasse weil ich endlich beruhigt weiterarbeiten kann da auf jeden Fall jeder Spieler Text sieht und ich nicht auf die Font verzichten muss...

Warum die Schrift nicht angezeigt wird ist zwar immer noch ein Rätsel -instaliert ist sie ja... (auch Neustarten hilft leider nicht) aber wenn das nur bei Windows98 passiert ist diese Lösung eigentlich nahezu optimal.

Danke euch beiden für die Hilfe http://www.multimediaxis.de/images/smilies/old/sm_12.gif