Vai al contenuto

Rilevato Ad-Blocker. Per favore disabilita il tuo adblocker quando navighi su makerando.com - Non c'è nessun annuncio invasivo.

  • Chatbox

    You don't have permission to chat.
    Load More

Recommended Posts

Nome Script: Text Cache

Versione: 1.0

Autore/i: Mithran

Link post originale: Link

 

Informazioni:

Il VXAce ha portato nuove opzioni di personallizzazione delle scritte e con essi na marea di bug che rovinano la bellezza delle window. Questo script risolve tutti i bug portando le vostre scritte al loro vero splendore... Quindi ogni progetto dovrebbe averlo.

 

Istruzioni:

Copiatelo sotto Materials e sopra Main.

 

Script:

 

 

# Text Cache# by Mithran# posted at forums.rpgmakerweb.com# Instructions%Q(This script is a workaround for the Bitmap#draw_text issues in RPGMaker VX Ace.By default, there are several errors with Bitmap#draw_text in Ace.1.  Text shrinking algorithm is overzealous.  Text drawn to a rect given by	its own text_size is reduced in size.  This is both counterintuitive, and not	the way it worked in previous versions (VX).  2.  Text drawn to any rect wider than approx 640 pixels wraps around to the	beginning of the line, overwriting previous text.  This also causes center	and right alignments to fail.  This is both unnecessary and not how it worked	in VX.	3.  Text drawn character by character with non true-type fonts has awkward spacing.	In addition, the text_size of a string of characters is not the same as the	sum of the text_size of each character.	This existed even in VX.	4.  The first character of a Bitmap#draw_text command for certain letters on	certain fonts is not drawn correctly.  Since message window draws character	by character, this can become a major issue. (example: Verdana 20 pt font)	These errors can be demonstrated using my text draw debugger:http://pastebin.com/p55ukZP2	What this script does:1.  Adds 2 pixels to any draw_text width, so text can be intuitively drawn to its	own text_size rect. Offsets x coordinate where appropriate.	If SIMPLE_FIX is set to true, only this fix will be enabled.	2.  Adds a text cache.  Instead of drawing text directly when called, a unique	bitmap is created for any potential text draw with buffers, drawn with extra	space around it.  The character is then copied whenever a text draw is	attempted.		Text Caching can be turned off by setting SIMPLE_FIX to true.		Text Caching also has the following features:	- Much faster processing than the original Bitmap#draw_text.	  Trades a small amount of memory to accomodate faster processing speed.	  The first time any letter is drawn takes approximately 3-4 times as long,	  subsquently, any time this same letter and font is drawn it is upwards of	  twice as fast.  The longer the string drawn, the bigger the difference.	- Accounts for a 3-length string when checking the size.  This makes single	  characters drawn look more natural for the offending fonts.	Does not work with:	- Reduced size text.	  If text is squeezed due to not being given enough room to draw, text caching	  is bypassed in favor of the original method.  This is due to the text	  squeezing algorithm reducing each character by a variable amount that can	  not be determined with text_size.  Manually stretching or aligning this	  "squeezed" text looks completely awful, so for now, this will have to	  stay like this.	  The exception to this is if the text has "just enough" room to draw,	  it will be given the two extra pixels rather than squeezing it.	- If text extends beyond MAX_DRAW_WIDTH, text caching will be forced.	  This disables the "squeeze" effect.  Using the default method means the text	  would draw over itself anyway, so this is the lesser of two evils.	  Changelog:v 1.01  Fixed crash error when using F12 to reset. (Thanks Archiea_Nessiah)v 1.0Official release.)#  class Bitmap  TEXT_TOP_BUFFER = 2  TEXT_SIDE_BUFFER = 8 # buffer in pixels to draw text away from  # the edge of the bitmap, to prevent certain characters from being cut off  SIMPLE_FIX = false # just adds the two pixels to prevent unnecessary squeeze  MAX_TEXT_DRAW_WIDTH = 640 # tests have shown the draw fails at around 640px  # if nil, no max width  NO_FIX = false # completely disables the fix, for testing comparison      alias draw_text_vxa draw_text  def draw_text(*args)	return draw_text_vxa(*args) if NO_FIX	if args[0].is_a?(Rect)	  rect = args[0]	  x, y, width, height = rect.x, rect.y, rect.width, rect.height	  text = args[1].to_s.clone || ""	  align = args[2] || 0	else	  x, y, width, height = *args[0..3]	  text = args[4].to_s.clone || ""	  align = args[5] || 0	end	text_rect = self.text_size(text)	text_width = text_rect.width	text_height = text_rect.height	squeeze = text_width > width	if SIMPLE_FIX or (squeeze and (MAX_TEXT_DRAW_WIDTH and width <= MAX_TEXT_DRAW_WIDTH))	  x -= align	  # shift one pixels to the left if centering	  # two if right right justified	  # to offset the extra width given	  return draw_text_vxa(x, y, width + 2, height, text, align)	else	  # TextCache.canvas(font) # passing the font slows this down extremly, changed it to later	  fontkey = self.font.to_a	  case align	  when 1; x += (width - text_width) / 2	  when 2; x += width - text_width	  end	  y += (height - text_height) / 2 # horizontal center	  buf = -TEXT_SIDE_BUFFER	  text.each_char { |char|		letter = TextCache.letters(fontkey, char)		draw_text_vxa(x + buf, y, letter.rect.width + 2, letter.height, char) if SIMPLE_FIX		# swap with original method for debugging and simple fix		self.blt(x + buf, y, letter, letter.rect) unless SIMPLE_FIX		buf += letter.rect.width - TEXT_SIDE_BUFFER * 2	  }	  	end  endendmodule TextCache  BUFFER_DRAW = 300 # for drawing characters, to make sure there is enough room    def self.canvas(font = nil)	@canvas = Bitmap.new(32, 32) if @canvas.nil? || @canvas.disposed?	#@canvas.font = font if font and font != @canvas.font	@canvas  end    def self.letters(font, char)	@cache ||= {}	key = font + [char]	if include?(key)	  return @cache[key]	elsif char.empty?	  return empty_bitmap	else	  return new_letter(font, char)	end  end    def self.empty_bitmap # not used, added for completness in case the cache is accessed directly	@cache[:empty] = Bitmap.new(32, 32) unless include?(:empty)	@cache[:empty]  end    def self.new_letter(fontary, char)	font = create_font(fontary)	# get the font	canvas.font = font	rect = canvas.text_size(char * 3)	# get size of character between two other characters (for better kerning)	b = Bitmap.new((rect.width / 3) + Bitmap::TEXT_SIDE_BUFFER * 2, rect.height)	# create bitmap just big enough for one character	b.font = font	# get the font	b.draw_text_vxa(rect.x - b.text_size(" ").width + Bitmap::TEXT_SIDE_BUFFER, rect.y - Bitmap::TEXT_TOP_BUFFER, BUFFER_DRAW, rect.height + Bitmap::TEXT_TOP_BUFFER * 2, " #{char} ", 0)	# draw blank spaces before and after character, fix for cutting off the	# first pixel using draw_text	key = fontary + [char]	@cache[key] = b	  end    def self.create_font(fontary)	font = Font.new(*fontary[0..1])	font.bold = fontary[2]	font.italic = fontary[3]	font.outline = fontary[4]	font.shadow = fontary[5]	font.color.set(*fontary[6..9])	font.out_color.set(*fontary[10..13])	font  end    def self.include?(key)	@cache[key] && !@cache[key].disposed?  end  def self.clear	@cache ||= {}	@cache.clear	GC.start  end  endclass Font  # font's instance variables are not reflective, so this has to be defined explicitly  def to_a	[name, size, bold, italic, outline, shadow, color.red, color.green, color.blue, color.alpha, out_color.red, out_color.green, out_color.blue, out_color.alpha]  end  end
Incompatibilità:

N/D

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

You need to be a member in order to leave a comment

Crea un account

Iscriviti per un nuovo account nella nostra comunità. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

  • Contenuti simili

    • Da KenzaMe92
      Nome Script: KZM - Cura Totale su Level Up
      Versione: 1.0
      Autore:
      Descrizione:
      Questo script permette di recuperare vita e mana e curare stati alterati salendo di livello.
       
      Istruzioni:
      Installare sotto "▼ Materiali" e sopra "▼ Processo Iniziale".
       
      Screenshot:
      Non Servono
       
      Script:
       
       
       
      Bug e Conflitti Noti:
      Nessuno
       
      Note dell'autore:
      Condividetelo, usatelo nei vostri progetti free o commerciali, l'importante è creditare l'autore.
    • Da KenzaMe92
      Nome Script: KZM - Cura su Level Up
      Versione: 1.0
      Autore:
      Descrizione:
      Questo script permette di recuperare vita e mana salendo di livello.
       
      Istruzioni:
      Installare sotto "▼ Materiali" e sopra "▼ Processo Iniziale"
       
      Screenshot:
      Non servono
       
      Script:
       
       
       
      Bug o Conflitti Noti:
      Nessuno
       
      [/b]Note dell'autore:[/b]
      Condividetelo, usatelo nei vostri progetti free o commerciali,l'importante è creditare l'autore.
    • Da Ally
      Nome Script: Picture Bug Fix
      Versione: Fix Bug
      Autore/i: Raizen884, Johnbolton, Gab!
       
      Informazioni:
      Quando una picture viene cancellata, gli script di rmvxace, mantengono un leggero ritardo di eliminazione di queste.
      La cosa non è percepibile con poche immagini, ma se ne usate ad esempio una decina, la cosa si noterà con freeze e lag.
      Per questo è stato creato questo piccolisismo script che fixerà questo piccolo (ma a quanto pare fastidioso), bug ^^
       
      Pinno il topic per lasciarlo in evidenza
       
      Istruzioni:
      Inserite lo script sotto Material.
       
      Script:
       
       
      #=======================================================# Picture Bug Fix# Author : Raizen884# Creditss : JohnBolton, Gab!# The script will correct a fatal bug caused by image deleting,# the more images deleted caused a constant freeze and lag# to the game.#=======================================================# It is better for this script to go over every new script added# to the scripts, and below all the original RMVXA scripts#=======================================================class Sprite_Picture < Sprite def update super if @picture.name != "" update_bitmap update_origin update_position update_zoom update_other else self.bitmap.dispose if self.bitmap != nil end endend
    • Da Ally
      Nome Script: Referenze Globali Oggetti Grafici
      Versione: 1.1
      Autore/i: Mithran

      Informazioni:
      Topic originale: Graphical Object Global Reference (inglese)

      Il Game.exe continua a crashare in maniera casuale e talvolta controllata?
      "Game.exe ha riscontrato un problema e verrà terminato"

      Questo è uno degli errori più frustranti di RPG Maker VX con cui fare i conti, visto che sembra andare e venire a caso, solo per determinate persone o a certe condizioni, e la causa del problema ti è ignota.

      Se il tuo progetto riscontra frequenti crash del Game.exe, questa lettura potrà esserti utile. Oddio, anche se non ti crasha può essere utile leggerla. Questo script si occupa di uno specifico problema che causa questi crash.




      Features:
      - identifica e permette di risolvere una delle più rilevanti cause di crash del Game.exe;
      - crea una referenza globale per ogni oggetto grafico creato finché non viene disposto, per prevenire che errori causino il crash

      Istruzioni:
      Incolla lo script in una nuova voce creata sotto Materials. Se usi script che creano grafica all'avvio (es. Woratana Simple Mouse System), questo script dovrà stare sotto ad essi.

      Script:

      http://pastebin.com/raw.php?i=rW9qkbxT

      Incompatibilità:
      D: Il Game.exe crasha costantemente e questo script non aiuta!
      R: Come spiegato, questo script risolve solo determinati motivi circoscritti del crash. Non tutti i motivi di crash vengono risolti. Può essere utile lasciare un post con dettagli dell'errore, come dice Mithran nel topic originale, ma magari sarebbe da farglieli notare proprio lì.

      D: Uso una versione crackata e...
      R: Nessun supporto per versioni non ufficiali.

      D: Ho trovato un modo di forzare un crash al Game.exe in un gioco che sembra stabile.
      R: Posta i dettagli, che interessano!

      Se riscontri errori, per favore provvedi informazioni complete di questi assieme a una breve spiegazione di come riprodurli (nel topic originale, magari).

      Note dell'autore:
      Con un link al post originale (inglese) e con i dovuti crediti, lo script originale senza modifiche può essere ripubblicato su altri forum. Può essere utilizzato in ogni progetto, a patto che rimangano i crediti nello script tali e quali (i crediti nell'insieme nel progetto non sono richiesti).
      Mithran, autore dello script.
    • Da Ally
      Nome Script: Fix Animazioni
      Versione: 1.0
      Autore/i: FenixFyreX

      Informazioni:
      Se prima le animazioni su mappa venivano create in un punto preciso della mappa attraverso @animation_ox e @animation_oy, con questo script si aggiornano le variabili per poter muovere le animazioni.

      Istruzioni:
      Lo script deve stare sopra Main, ma SOTTO TUTTI gli altri Script che avete nel progetto.

      Script:


      class Sprite_Base   alias update_animation_oxy update_animation unless $@   def update_animation(*args,&block)     if @animation.position == 3       if viewport == nil         @animation_ox = 544 / 2         @animation_oy = 416 / 2       else         @animation_ox = viewport.rect.width / 2         @animation_oy = viewport.rect.height / 2       end     else       @animation_ox = x - ox + width / 2       @animation_oy = y - oy + height / 2       if @animation.position == 0         @animation_oy -= height / 2       elsif @animation.position == 2         @animation_oy += height / 2       end     end     update_animation_oxy(*args,&block)   end end
×