# Define the type of bar used. (0 = Gradient, 1 = Transitional) # It would take longer to explain the differences than to just try each out. # There's only two as of the moment. BAR_STYLE = 1
# Define the width and height, in pixels, of the bars. BAR_WIDTH = 128 BAR_HEIGHT = 8
# Define switch for active/visibility control within game. ONOFF_SWITCH = 10
#====================================================================# # END CONFIGURATION # #====================================================================#
def initialize(y = -12) super(0, y, 640, 96) # Set the windowskin's opacity to 0. self.windowskin = nil @colors1 = [HUNGER_EMPTY, HUNGER_FULL, BACKGROUND_COLOR] @colors2 = [THIRST_EMPTY, THIRST_FULL, BACKGROUND_COLOR] @actors = $game_party.actors @stats = stats refresh end
def refresh # Dispose the contents of the HUD. if self.contents != nil self.contents.dispose self.contents = nil end # Adjust width and location of window. self.width = @actors.size * (BAR_WIDTH + 48) self.x = (640 - self.width) / 2 self.contents = Bitmap.new(self.width, self.height) # Iterate actors. @actors.each_index {|i| actor = @actors # Calculate locations for each actor's bars. x = i * (BAR_WIDTH + 48) # Draw actor's name. self.contents.font.size = 16 self.contents.draw_text(x, 0, BAR_WIDTH, 16, actor.name) # Draw hunger bars. w, h, rate, max = BAR_WIDTH, BAR_HEIGHT, @stats[0], @stats[1] self.contents.draw_bar(x, 16, w, h, rate, max, BAR_STYLE, @colors1) # Draw thirst bars. rate, max, height = @stats[2], @stats[3], 16+BAR_HEIGHT+4 self.contents.draw_bar(x, height, w, h, rate, max, BAR_STYLE, @colors2) } end def stats return @actors.collect {|a| [a.hunger, a.max_hunger, a.thirst, a.max_thirst]} end def update self.visible = $game_switches[ONOFF_SWITCH] if self.visible if (@stats != stats) || (@actors != $game_party.actors) @stats, @actors = stats, $game_party.actors refresh end end end end
class Bitmap def draw_bar(x, y, w, h, rate, max, style, colors = nil) # Set required instance variables. @bar_rect = Rect.new(x, y, w, h) @rate, @max, @style, @colors = rate, max, style, colors # Define default colors if not defined. (RED <--> GREEN) if @colors == nil @colors = [Color.new(255, 0, 0), Color.new(0, 255, 0), Color.new(0, 0, 0)] end # Draw the background color. self.fill_rect(@bar_rect, @colors[2]) # Branch by what style is being used. case @style when 0 then gradient when 1 then transition end end #------------------------------------------------------------------------------- def gradient # Get the bar from the cache. key = [@style, @bar_rect.width-2, @bar_rect.height-2, @colors[0], @colors[1]] bar = RPG::Cache.gradient_bar(*key) # Draw the gradient bar using rectangular transfer. rect = Rect.new(0, 0, fill_width, @bar_rect.height) self.blt(@bar_rect.x+1, @bar_rect.y+1, bar, rect) end #------------------------------------------------------------------------------- def transition # Returns the color for current rate. c1 = [@colors[0].red, @colors[0].green, @colors[0].blue, @colors[0].alpha] c2 = [@colors[1].red, @colors[1].green, @colors[1].blue, @colors[1].alpha] rgba, rate = [], 1 - (@rate.to_f / @max) c1.each_index {|i| rgba = c2 - ((c2 - c1) * rate) } # Set the bars fill rate and color depending on value. rect = Rect.new(@bar_rect.x+1, @bar_rect.y+1, fill_width, @bar_rect.height-2) self.fill_rect(rect, Color.new(*rgba)) end #------------------------------------------------------------------------------- def fill_width # Calculate the difference, in percentage, of the min and max rates. return ((@rate / @max.to_f) * (@bar_rect.width - 2)).round end #------------------------------------------------------------------------------- end
class Scene_Map alias zer0_hunger_hud_main main def main # Add the bars to Scene_Map. @hunger_hud = Hunger_HUD.new zer0_hunger_hud_main @hunger_hud.dispose unless @hunger_hud.disposed? || @hunger_hud == nil end alias zer0_hunger_hud_upd update def update # Update the bars as needed. @hunger_hud.update zer0_hunger_hud_upd end end
module RPG::Cache def self.gradient_bar(style, width, height, color1, color2) # Create a unique key to call the bar back with. path = [style, width, height, color1, color2] # Check if cache already has bitmap defined, if not create it now. if !@cache.include?(path) || @cache[path].disposed? bitmap, rates = Bitmap.new(width, height), [] # Iterate through each pixel horizontally, setting a gradient color. c1 = [color1.red, color1.green, color1.blue, color1.alpha] c2 = [color2.red, color2.green, color2.blue, color2.alpha] # Draw the bar, having in transition from the first color to the second. c1.each_index {|i| rates = (c1 - c2).to_f / width } (0...width).each {|i| values = [0, 1, 2, 3].collect {|j| c1[j] - (i * rates[j]) } # Set the color incrementally. This will be used later. bitmap.fill_rect(i, 0, 1, height, Color.new(*values)) } @cache[path] = bitmap end # Return the created bitmap. return @cache[path] end end
il problema è che subito dopo che la partita viene avviata si vedono ma passati pochi secondi sparisce, la stessa cosa appare quando chiudo il menu (ho lo script menu ad anello) si vede per pochi secondi e poi scompare, come posso risolvere?
il secondo script con il quale ho "problemi" è l'hp bar,
#----------------------------------------------------------------- class Scene_Map #----------------------------------------------------------------- alias sk_bar_main main def main @bars = Window_Sk_Bars.new sk_bar_main @bars.dispose if @bars != nil end #----------------------------------------------------------------- alias sk_bar_update update def update @bars.update sk_bar_update end #----------------------------------------------------------------- end #----------------------------------------------------------------- class Window_Base < Window #----------------------------------------------------------------- def sk_initialize(font=0,size=22) font = "Tahoma" if font == 0 self.contents = Bitmap.new(self.width-32,self.height-32) self.contents.font.name = font self.contents.font.size = size end #----------------------------------------------------------------- def draw_text_outline(x,y,w,h,str,c=normal_color,a=0) self.contents.font.color = Color.new(0,0,0,255) self.contents.draw_text(x-1,y,w,h,str,a) self.contents.draw_text(x+1,y,w,h,str,a) self.contents.draw_text(x,y+1,w,h,str,a) self.contents.draw_text(x,y-1,w,h,str,a) self.contents.font.color = c self.contents.draw_text(x,y,w,h,str,a) end #----------------------------------------------------------------- end #----------------------------------------------------------------- class Window_Sk_Bars < Window_Base #----------------------------------------------------------------- def initialize super(250,-8,206,96) sk_initialize("Comic Sans MS") self.opacity = 0 end #----------------------------------------------------------------- def update self.contents.clear actor = $game_party.actors[0] draw_text_outline(0,-4,64,26,"HP") draw_actor_hp(actor,30,0) end #----------------------------------------------------------------- def draw_actor_hp(actor,x,y) width = 128 y += 4 white = Color.new(255,255,255,255) black = Color.new(0,0,0,255) w = width * actor.hp / actor.maxhp # White border self.contents.fill_rect(x+1, y-1, width-2, 1, white) self.contents.fill_rect(x, y, width, 1, white) self.contents.fill_rect(x-1, y+1, width+2, 9, white) self.contents.fill_rect(x, y+10, width, 1, white) self.contents.fill_rect(x+1, y+11, width-2, 1, white) # Black back self.contents.fill_rect(x+2, y, width-4, 1, black) self.contents.fill_rect(x+1, y+1, width-2, 1, black) self.contents.fill_rect(x, y+2, width, 7, black) self.contents.fill_rect(x+1, y+9, width-2, 1, black) self.contents.fill_rect(x+2, y+10, width-4, 1, black) # Generating the color val = 255 * ((actor.hp*100)/actor.maxhp) green = 255 - val/100 color = Color.new(224,green,0,255) w_color = Color.new(255,green+32,96,255) if green > 64 then green -= 32 elsif green > 128 then green -= 64 end b_color = Color.new(172,green,0,255) # Making the bar self.contents.fill_rect(x+2, y, w-4, 1, w_color) self.contents.fill_rect(x+1, y+1, w-2, 1, w_color) self.contents.fill_rect(x, y+2, w, 7, color) self.contents.fill_rect(x+1, y+9, w-2, 1, color) self.contents.fill_rect(x+2, y+10, w-4, 1, b_color) end #----------------------------------------------------------------- end #-----------------------------------------------------------------
il problema è che sta in alto sulla schermata, centrato, e li ci dovrebbero essere anche le barre della sete/fame, qualche buon anima puo fare in modo ceh mi appaia in basso?
Question
mulliky
salve,
ho 2 problemi con 2 script diversi, però a dirla tutta solo 1 di loro mi da veramente problemi
il primo script è questo:
che è l'hud dello script hunger and thirst presente qui : http://forum.chaos-project.com/index.php?topic=6363.0
il problema è che subito dopo che la partita viene avviata si vedono ma passati pochi secondi sparisce, la stessa cosa appare quando chiudo il menu (ho lo script menu ad anello) si vede per pochi secondi e poi scompare, come posso risolvere?
il secondo script con il quale ho "problemi" è l'hp bar,
il problema è che sta in alto sulla schermata, centrato, e li ci dovrebbero essere anche le barre della sete/fame, qualche buon anima puo fare in modo ceh mi appaia in basso?
scusate il disturbo
Edited by mullikyhttp://i.imgur.com/ckX1Aab.png
http://i.imgur.com/esiObC2.gif
http://fc08.deviantart.net/fs71/f/2012/313/5/4/derpy_bop_by_blackgryph0n-d5kiv63.gif
6.9
http://www.hobbitfilm.it/wp-content/uploads/2013/04/gollum.jpg
Link to comment
Share on other sites
8 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now