Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

1

Dienstag, 12. September 2017, 16:54

Anti Aliasing abstellen

Heyho.
Würd mich nicht wundern, wenn ich nicht der erste bin, der danach fragt, aber ich konnte kein passendes Thema finden... Von daher sorry, wenn es doppelt ist.

Aber gibt es eine Möglichkeit - vielleicht auch durch einen Script - das anti aliasing für die Schrift ingame abzustellen?
Ich würde gern eine sehr kantige Pixelfont verwenden (das ganze Spiel ist im 8-Bit Style), nur leider verhunzt der Maker mir jede Schrift, da er die Kanten abschwächt.
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:

2

Dienstag, 12. September 2017, 21:04

Hallo Snugglebit!

Es gibt eine ziemlich gute Heuristik, um Antworten auf Makerfragen zu bekommen. Spreche deine Frage einmal laut aus. Klingt dein Wunsch an sich irgendwie komisch? Dann hast Du gute Chancen, dass Shabraxxx diese Frage schonmal gestellt hat. Einfach mal seine alten Beiträge durchgehen und: Unterbinden der Kantenglättung von Schrift ;)

Soweit ich sehe hat der VX Ace keine Option, um die Kantenglättung abzuschalten: Dokumentation der RGSS3 Font-Klasse
Also würde ich es erstmal mit der Variante versuchen, die Shabz 2015 verwendet hat. Kennst Du dich gut genug mit dem Scripting im Maker aus, um das selber für dich und deinen Font auszuprobieren oder möchtest Du dabei unterstützt werden?

Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

3

Mittwoch, 13. September 2017, 16:53

Ich habe so ziemlich genau gar keine Ahnung von der Skripsprache, daher wäre ein wenig Hilfe nicht schlecht ^^
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:

4

Donnerstag, 14. September 2017, 00:59

Na, dann mach doch mal den Scripteditor im Maker auf und scroll in der Scriptliste ganz nach unten bis "▼ Materials". Und füge dort das folgende Script ein.

Spoiler: Quellcode

In Zeile 22 des folgenden Scripts, kann man Anpassungen vornehmen.

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
# Nur für Tests. Es werden keine Nutzungsrechte eingeräumt.
class Color
  #--------------------------------------------------------------------------
  # * Bestimme den Unterschied zwischen zwei Farben anhand ihrer Farbwerte
  #     0 bei identische Farben
  #     Immer 255 wenn mit was anderem als einer Farbe verglichen wird
  #--------------------------------------------------------------------------
  def difference( color )
    return 255 unless color.kind_of?( Color )
    diff = (red - color.red).abs
    diff+= (green - color.green).abs
    diff+= (blue - color.blue).abs
    diff+= (alpha - color.alpha).abs
    diff / 4
  end
end
 
class Window_Base
  #--------------------------------------------------------------------------
  # * Schwellenwert
  #--------------------------------------------------------------------------
  Alias_Trashold = 64 # something between 0 and 255
  #--------------------------------------------------------------------------
  # * Entferne beim Zeichnen die Kantenglättung
  #--------------------------------------------------------------------------
  def draw_text_aliased( *args )
    temp = Bitmap.new( contents.width, contents.height )
    temp.draw_text( *args )
    for x in 0...contents.width
      for y in 0...contents.height
        pixel = temp.get_pixel( x, y )
        next if pixel.alpha.zero?
        if contents.font.color.difference( pixel ) < Alias_Trashold
          temp.set_pixel( x, y, contents.font.color )
        else
          temp.set_pixel( x, y, Color.new(0,0,0,0) )
        end
      end
    end
    contents.blt( 0, 0, temp, temp.rect )
    nil
  end
  #--------------------------------------------------------------------------
  # * Draw Text
  #     args : Same as Bitmap#draw_text.
  #--------------------------------------------------------------------------
  def draw_text(*args)
    draw_text_aliased( *args )
  end
end
zum Lesen den Text mit der Maus markieren


Das Script ist bereits als Plug&Play eingerichtet. Also Du kannst direkt den Scripteditor wieder zumachen und ein Testspiel starten.
Probier mal aus, ob deine Schriftart überhaupt für diesen Lösungsansatz geeignet ist. Für den Bastler ist in Zeile 22 des Scripts ein "Schräubchen", an dem man ein bisschen drehen kann, um Feineinstellungen vorzunehmen.
Es kann aber auch sein, dass diese Lösung mit dieser besonderen Schriftart von dir so garnicht funktionieren will. Dann müssen wir uns was neues überlegen.

Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

5

Donnerstag, 14. September 2017, 14:56

Der Script funktioniert so weit ganz gut. Die Schrift sieht wesentlich besser (kantiger) aus, danke.
Allerdings sieht man den Text nun nicht mehr scrollen. Wenn sich eine Textbox öffnet, dann bleibt sie für einen Moment leer (so lang, wie der Text zum scrollen benötigt, man sieht es nur einfach nicht). Erst, wenn der Text dann vollständig aufgeführt worden wäre, erscheint er - dann auch direkt vollständig ohne Animationen.
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:

6

Freitag, 15. September 2017, 02:28

Meinst Du mit scrollen den Eventbefehl "Zeige Text" oder "Zeige Fließtext"?
Auf jeden Fall ist die hier vorgestellte Lösung nicht performant. Man müsste sich da wohl was besseres überlegen, wenn man mehr als 10 FPS haben möchte.

Hmm. Ich frage mal Shabz. Der ist sehr erfahren auf dem Gebiet "PseudoRetro".

Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

7

Freitag, 15. September 2017, 14:26

10 FPS? Okay... Die Frames sind optimal bei mir.
Ich meinte den normalen "Zeige Text" Befehl. Aber auch dort wird der Text ja "Buchstabe für Buchstabe" hineingescrollt. Und dieser Effekt wird nicht angezeigt. Stattdessen bleibt das Spiel für einen Moment komplett stehen (sämtliche Animationen im Hintergrund stoppen gänzlich) und dann erscheint der Text.
Außerdem ist mir gerade aufgefallen, fehlen sämtliche Wörter im Menü .__.
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:

8

Freitag, 15. September 2017, 18:58

Uhm. Also irgendwie bekomme ich bei meinen Tests ganz andere Ergebnisse. Im Menü fehlt bei mir garnichts und wenn ich mir inGame via F2 die FPS angucke, sehe ich bei Messageboxen einen starken FPS einbruch, aber die Animation kommt trotzdem - nur halt sehr stockend.

Kannst Du mal ein Projekt mit dem Font hier hochladen, indem man die Probleme untersuchen kann, die Du hast?

Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

9

Freitag, 15. September 2017, 21:38

Bevor ich das mache... Liegt es vielleicht an diesem Scrip? Mit dem lassen sich nämlich auch diverse Änderungen an der Schrift vornehmen (nur leider eben nicht das Anti Aliasing :c)


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
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#===============================================================================
# Miscellaneous Options
# By Jet10985 (Jet)
#===============================================================================
# This snippet will allow you to perform additional customization on some
# of the "Finer Details" of your game, not available in the Editor.
# This script has: 14 customization options.
#===============================================================================
# Overwritten Methods:
# None
#-------------------------------------------------------------------------------
# Aliased methods:
# DataManager: make_filename, save_file_exists?
# Game_System: japanese?
#===============================================================================
module MiscellaneousOptions
 
  #=============================================================================
  # Font Options
  #=============================================================================
 
  #-----------------------------------------------------------------------------
  # This is what font the game will use by default
  # You may use a single font, or multiples in the form of an array
  # When using multiple fonts, the game will go through the array until
  # it finds a font the player has installed.
  #-----------------------------------------------------------------------------
  Font.default_name = ["Chewy", "Arial", "Courier New"]
 
  #-----------------------------------------------------------------------------
  # This is how big font is by default.
  #-----------------------------------------------------------------------------
  Font.default_size = 24
 
  #-----------------------------------------------------------------------------
  # This determines if text is drawn in bold or not, by default.
  #-----------------------------------------------------------------------------
  Font.default_bold = false
 
  #-----------------------------------------------------------------------------
  # This determines if text is drawn in italic or not, by default.
  #-----------------------------------------------------------------------------
  Font.default_italic = false
 
  #-----------------------------------------------------------------------------
  # This determines if text is drawn with a shadow or not, by default.
  #-----------------------------------------------------------------------------
  Font.default_shadow = true
 
  #-----------------------------------------------------------------------------
  # This determines what color text if drawn in by default.
  #-----------------------------------------------------------------------------
  Font.default_color = Color.new(255, 255, 255)
 
  #-----------------------------------------------------------------------------
  # This determines if text is drawn with an outline
  #-----------------------------------------------------------------------------
  Font.default_outline = true
 
  #-----------------------------------------------------------------------------
  # This determines if what color text's outline will be drawn in
  #-----------------------------------------------------------------------------
  Font.default_out_color = Color.new(0, 0, 0, 255)
 
  #-----------------------------------------------------------------------------
  # Is the game in Japanese?
  #-----------------------------------------------------------------------------
  JAPANESE = false
 
  #=============================================================================
  # Windows Options
  #=============================================================================
 
  #-----------------------------------------------------------------------------
  # This determines if the Game's Process Priority will be heightened to "High"
  # at startup. This may, or may not, help some lag issues.
  #-----------------------------------------------------------------------------
  HIGH_PROCESS = true
 
  #-----------------------------------------------------------------------------
  # This determines if the Mouse Cursor should be hidden will inside the game.
  # This only applies if the mouse is inside the Game's window.
  #-----------------------------------------------------------------------------
  HIDE_MOUSE = false
 
  #-----------------------------------------------------------------------------
  # This determines if the window should be resizable.
  # By default, the game window is not resizable without script calls.
  # Note this does not increase the Game's graphic displaying abilities,
  # and will cause graphics stretching/shrinking.
  #-----------------------------------------------------------------------------
  ALLOW_RESIZING = false
 
  #=============================================================================
  # Game Options
  #=============================================================================
 
  #-----------------------------------------------------------------------------
  # This determines what size the game window should be. Max: 640x480
  # Must be increments of 32
  #-----------------------------------------------------------------------------
  Graphics.resize_screen(544, 416)
 
  #-----------------------------------------------------------------------------
  # This determines if Save Files will be saved into the AppData folder
  # in windows, instead of the directory of the game.
  # In Windows XP: C:\Documents and Settings\UserName\Application Data\GAME_NAME
  # In Windows Vista/7: C:\Users\UserName\AppData\Roaming\GAME_NAME
  #-----------------------------------------------------------------------------
  SAVE_IN_APPDATA = false
 
  #-----------------------------------------------------------------------------
  # What is your game's name? This will only be used if you use SAVE_IN_APPDATA
  #-----------------------------------------------------------------------------
  GAME_NAME = "Jet Is Awesome"
 
end
 
#===============================================================================
# DON'T EDIT FURTHER UNLESS YOU KNOW WHAT TO DO.
#===============================================================================
 
module MiscellaneousOptions
 
  def self.handle
    a = Win32API.new('kernel32', 'GetPrivateProfileString', 'pppplp', 'l')
    b = Win32API.new('user32', 'FindWindow', 'pp', 'i')
    a.call("Game", "Title", "", title = "\0" * 256, 256, ".//Game.ini")
    return b.call("RGSS Player", title.delete!("\0"))
  end
end
 
if MiscellaneousOptions::HIDE_MOUSE
  Win32API.new('user32', 'ShowCursor', 'i', 'i').call(0)
end
if MiscellaneousOptions::HIGH_PROCESS
  Win32API.new('kernel32','SetPriorityClass','pi','i').call(-1, 256)
end
if MiscellaneousOptions::ALLOW_RESIZING
  Win32API.new('user32', 'SetWindowLong', 'lll', 'l').call(
    MiscellaneousOptions.handle, -16, 0x10C70000|0x00080000)
end
if MiscellaneousOptions::SAVE_IN_APPDATA
	f = "#{ENV['APPDATA']}\\#{MiscellaneousOptions::GAME_NAME}"
	Dir.mkdir(f) unless File.directory?(f)
	Dir.mkdir("#{f}\\Saves") unless File.directory?("#{f}\\Saves")
end
 
class << DataManager
 
	alias jet3849_save_file_exists save_file_exists?
	def save_file_exists?(*args, &block)
		if MiscellaneousOptions::SAVE_IN_APPDATA
			f = "#{ENV['APPDATA']}\\#{MiscellaneousOptions::GAME_NAME}"
			Dir.entries("#{f}\\Saves").size > 2
		else
			jet3849_save_file_exists(*args, &block)
		end
	end
 
	alias jet2734_make_filename make_filename
	def make_filename(index)
		if MiscellaneousOptions::SAVE_IN_APPDATA
			f = "#{ENV['APPDATA']}\\#{MiscellaneousOptions::GAME_NAME}"
			return "#{f}\\Saves\\#{sprintf("Save%02d.rvdata2", index + 1)}"
		else
			jet2734_make_filename(index)
		end
 
	end
end
 
class Game_System
 
	alias jet2734_japanese japanese?
	def japanese?(*args, &block)
		$data_system.japanese = MiscellaneousOptions::JAPANESE
		jet2734_japanese(*args, &block)
	end
end
zum Lesen den Text mit der Maus markieren


EDIT
Ich habe gerade selbst herausgefunden, dass es dieser Script ist, der das Problem verursacht:
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
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#==============================================================================
# 
# ▼ Moby's Script System - Text SE V1.0
# -- Last Updated: 2012.07.23
# 
#==============================================================================
 
$imported = {} if $imported.nil?
$imported["MSS-Text_SE"] = 1.0
 
#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# N/A
# 
#==============================================================================
# ▼ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This Script plays a SE you define in the module at the top every x letters.
# Possible Settings:
# - SE File Name
# - Pitch Range
# - Volume
# - Interval(x)
# 
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
# 
# All settings possible are placed in the module at the top.
# 
# If you have any questions, bugs you want to report or anything else,
# please contact me at mobychan@gmx.de or via my profile on 
# http://forums.rpgmakerweb.com (mobychan) or 
# http://w11.zetaboards.com/RMParadise/index/ (mobychan).
# 
# 
#==============================================================================
# ▼ Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjusting.
# 
#==============================================================================
# 
#==============================================================================
# ▼ Methods changed/added
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# -----------------------------------------------------------------------------
# Aliased methods:
# -----------------------------------------------------------------------------
# class Window_Message:
#     - initialize
#     - process_normal_character
#     - process_new_page
# 
# -----------------------------------------------------------------------------
# Added methods:
# -----------------------------------------------------------------------------
# module Sound:
#     - self.play_text_se
# 
#==============================================================================
# 
#==============================================================================
# ▼ Compatibility Issues
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Since this script doesn't override anything there shouldn't be any issues.
# I fsomething doesn't work properly, try putting this script below every other
# script.
#==============================================================================
 
 
module TSE
  # The name of the file that will be played, must be placed in Audio/SE
  SE = "scroll"
  # The pitch range of the file being played
  # [start_pitch, end_pitch]
  # start and end pitch can be the same to have a static pitch
  Pitch = [100, 105]
  # The volume of the file being played
  Volume = 50
  # The interval at which the sound is being played, every x characters
  Interval = 3
end
 
 
 
#==============================================================================
# ** Sound
#==============================================================================
 
module Sound
 
  # System Sound Effect
  def self.play_text_se
    file = "Audio/SE/" + TSE::SE
    pitch = rand(TSE::Pitch[1] - TSE::Pitch[0]) + TSE::Pitch[0]
    Audio.se_play(file, TSE::Volume, pitch)
  end
end
 
 
 
#==============================================================================
# ** Window_Message
#==============================================================================
class Window_Message < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias tse_init initialize unless $@
  def initialize
    tse_init
    @character = 0
  end
  #--------------------------------------------------------------------------
  # * Normal Character Processing
  #--------------------------------------------------------------------------
  alias tse_process_normal_character process_normal_character unless $@
  def process_normal_character(c, pos)
    tse_process_normal_character(c, pos)
    Sound.play_text_se if @character % TSE::Interval == 0 && !@line_show_fast
    @character += 1
  end
  #--------------------------------------------------------------------------
  # * New Page Character Processing
  #--------------------------------------------------------------------------
  alias tse_process_new_page process_new_page unless $@
  def process_new_page(text, pos)
    tse_process_new_page(text, pos)
    @character = 0
  end
end
zum Lesen den Text mit der Maus markieren


Wenn ich den entferne, bekomme ich dieselben Symptome wie du, also ca. 20 FPS beim Scrollen des Textes und in den Menüs fehlt dann auch nichts mehr.
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:

10

Freitag, 15. September 2017, 22:56

Mit den Menüs hat das Script von Moby nichts zu tun, aber tatsächlich buggt da irgendwas mit den Messageboxen rum. Ich kann es mir im Moment aber nicht genau erklären. Ich vermute da passiert einfach zu viel auf einmal in einem Frame, weswegen der Maker ein paar Frames skippt.

Ich hoffe auf einen ShabzExMachina. :/ Der hätte dann eine schöne Lösung parat.
Probier mal diese Version des Scripts aus:

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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Nur für Tests. Es werden keine Nutzungsrechte eingeräumt.
class Color
  #--------------------------------------------------------------------------
  # * Bestimme den Unterschied zwischen zwei Farben anhand ihrer Farbwerte
  #     0 bei identische Farben
  #     Immer 255 wenn mit was anderem als einer Farbe verglichen wird
  #--------------------------------------------------------------------------
  def difference( color )
    return 255 unless color.kind_of?( Color )
    diff = (red - color.red).abs
    diff+= (green - color.green).abs
    diff+= (blue - color.blue).abs
    diff+= (alpha - color.alpha).abs
    diff / 4
  end
end
 
class Window_Base
  #--------------------------------------------------------------------------
  # * Schwellenwert
  #--------------------------------------------------------------------------
  Alias_Trashold = 64 # something between 0 and 255
  #--------------------------------------------------------------------------
  # * Entferne beim Zeichnen die Kantenglättung
  #--------------------------------------------------------------------------
  def draw_text_aliased( *args )
    temp = Bitmap.new( contents.width, contents.height )
    temp.draw_text( *args )
    for x in 0...contents.width
      for y in 0...contents.height
        pixel = temp.get_pixel( x, y )
        next if pixel.alpha.zero?
        if contents.font.color.difference( pixel ) < Alias_Trashold
          temp.set_pixel( x, y, contents.font.color )
        else
          temp.set_pixel( x, y, Color.new(0,0,0,0) )
        end
      end
    end
    contents.blt( 0, 0, temp, temp.rect )
    temp.dispose
    nil
  end
  #--------------------------------------------------------------------------
  # * Draw Text
  #     args : Same as Bitmap#draw_text.
  #--------------------------------------------------------------------------
  def draw_text(*args)
    draw_text_aliased( *args )
  end
  #--------------------------------------------------------------------------
  # * 
  #--------------------------------------------------------------------------
  def getLetter( c, h )
    @letters = {} unless @letters
    font = contents.font
    key = [font.name, font.size, c]
    unless @letters.has_key?(key)
      r = contents.text_size(c)
      b = Bitmap.new(r.width*2, h)
      b.draw_text(0, 0, r.width * 2, h, c)
      for x in 0...b.width
        for y in 0...b.height
          pixel = b.get_pixel( x, y )
          next if pixel.alpha.zero?
          if contents.font.color.difference( pixel ) < Alias_Trashold
            b.set_pixel( x, y, contents.font.color )
          else
            b.set_pixel( x, y, Color.new(0,0,0,0) )
          end
        end
      end
      @letters[key] = b
    end
    @letters[key]
  end
  #--------------------------------------------------------------------------
  # * Normal Character Processing
  #--------------------------------------------------------------------------
  def process_normal_character(c, pos)
    text_width = text_size(c).width
    temp = getLetter( c, pos[:height] )
    contents.blt( pos[:x], pos[:y], temp, temp.rect )
    pos[:x] += text_width
  end
  #--------------------------------------------------------------------------
  # * 
  #--------------------------------------------------------------------------
  def clear_letter_cache
    if @letters
      @letters.each_value{ |bmp| bmp.dispose }
      @letters.clear
    end
  end
  #--------------------------------------------------------------------------
  # * 
  #--------------------------------------------------------------------------
  alias_method(:org_dispose_wo_lettercache, :dispose )
  def dispose
    org_dispose_wo_lettercache
    clear_letter_cache
  end
end
 
class Window_Message
  #--------------------------------------------------------------------------
  # * Process All Text
  #--------------------------------------------------------------------------
  alias_method(:org_process_all_text_wo_lettercache, :process_all_text )
  def process_all_text
    org_process_all_text_wo_lettercache
    clear_letter_cache
  end
end

Snugglebit

Krieger

  • »Snugglebit« ist der Autor dieses Themas

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

11

Mittwoch, 27. September 2017, 15:12

Bei diesem Script habe ich tatsächlich zwei weitere Probleme festgestellt.
Zum einen lädt das Menü recht langsam. Wenn man ESC drückt, dauert es etwa zwei Sekunden, bevor sich das Menü öffnet.

Zum anderen bekomme ich eine Fehlermeldung, wenn ich im Item Menü ein Item auswählen will (egal ob es benutzbar ist oder nicht. Bild im Anahng).

Ich habe sonst auch erst einmal eine Schrift gefunden, die auch mit Anti-Aliasing gut ausschaut. Eventuell kann ich darauf verzichten, falls sich keine Lösung mehr finden sollte. Trotzdem vielen Dank für die Mühen :hi:
»Snugglebit« hat folgende Datei angehängt:
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:

Social Bookmarks