thotomato Nouveau venu
Nombre de messages : 8 Age : 27 Localisation : Sur RMVX Date d'inscription : 23/12/2010
| Sujet: [VX]Reflet/Reflexion Jeu 23 Déc - 21:48 | |
| Crédits: Bascolo Fonction : Permet de réfléchir votre personnage sur une case plus bas. Exemple : Lorque votre personnage s'approche d'un cours d'eau, il percois sont reflet sur l'eau. Voir Photo : - Spoiler:
Instructions : 1. Copier le script au-dessus de "Main" dans la section "Materials" sous n'importe quel nom. Ensuite créez-vous une carte. - Spoiler:
- Code:
-
#============================================================================== # Réflexion Sprite - Version 1.0 # par Bascolo #------------------------------------------------------------------------------ # This script makes specially desigated areas reflect the character sprite and # events. #============================================================================== # Instructions: # # Create areas using the area creator of the map editor and call them "Reflect". # # For events you can use these two commands in part of their name. # # Reflect # # Any event with "Reflect" as part of it's name will have the reflect effect on # the special areas of the map. # # # /OFFSET[#] # # [#] = Numerical value of the offset. # # Example: # /OFFSET[10] # # Offset changes the Y offset of the sprite in the water.(How far is the # Reflection from the characters original standing point) # # # $game_player.reflect_offset = # # # # = Value of the character offset. # # Just the same as the event offset except this one handles the characters # offset reflection. #==============================================================================
#=============================================================== # # [url=http://www.rpgmakervx-fr.com][color=#075066]www.rpgmakervx-fr.com [/color][/url] # #===============================================================
#-------------------------------------------------------------------------- # * Constants for activating the wave effect on the water #-------------------------------------------------------------------------- WATER_WAVE_EFFECT = true
#============================================================================== # ** Sprite_Character #------------------------------------------------------------------------------ # This sprite is used to display characters. It observes a instance of the # Game_Character class and automatically changes sprite conditions. #==============================================================================
class Sprite_Reflect < Sprite_Base #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :character #-------------------------------------------------------------------------- # * Object Initialization # viewport : viewport # character : character (Game_Character) #-------------------------------------------------------------------------- def initialize(viewport = nil, character = nil, offset = nil) super(viewport) @character = character @player_offset = $game_player.reflect_offset @offset = (@character.is_a?(Game_Player) ? @player_offset : offset) sprite_setup update end #-------------------------------------------------------------------------- # * Sprite Setup #-------------------------------------------------------------------------- def sprite_setup self.bitmap = Cache.character(@character.character_name) self.angle = 180 self.mirror = true self.opacity = 120 sign = @character.character_name[/^[\!\$]./] if sign != nil and sign.include?('$') @cw = bitmap.width / 3 @ch = bitmap.height / 4 else @cw = bitmap.width / 12 @ch = bitmap.height / 8 end @cw = bitmap.width / 12 @ch = bitmap.height / 8 end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super index = @character.character_index pattern = @character.pattern < 3 ? @character.pattern : 1 sx = (index % 4 * 3 + pattern) * @cw sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch self.src_rect.set(sx, sy, @cw, @ch) self.ox = 16 if @character.is_a?(Game_Player) self.oy = 38 + $game_player.reflect_offset else self.oy = 38 + @offset end self.x = @character.screen_x self.y = @character.screen_y self.z = @character.screen_z
if WATER_WAVE_EFFECT == true self.wave_amp = 1 self.wave_length = 1 self.wave_speed = 3 end end end
#============================================================================== # ** Spriteset_Map #------------------------------------------------------------------------------ # This class brings together map screen sprites, tilemaps, etc. It's used # within the Scene_Map class. #==============================================================================
class Spriteset_Map #-------------------------------------------------------------------------- # * Create Character Sprite #-------------------------------------------------------------------------- alias tds_sprite_reflection_create_characters create_characters def create_characters tds_sprite_reflection_create_characters @character_sprites = [] @event_reflection_sprite = [] @reflecting_events = [] for i in $game_map.events.keys.sort sprite = Sprite_Character.new(@viewport1, $game_map.events[i]) @character_sprites.push(sprite) end for vehicle in $game_map.vehicles sprite = Sprite_Character.new(@viewport1, vehicle) @character_sprites.push(sprite) end @character_sprites.push(Sprite_Character.new(@viewport1, $game_player)) for i in $game_map.events.keys.sort @event_name_offset = $game_map.events[i].name @event_name_offset[ /\/OFFSET\[(.*?)\]/ ] sprite = Sprite_Reflect.new(@viewport1, $game_map.events[i], $1 != nil ? $1.to_i : 0) if $game_map.events[i].name.include?("Reflect") @event_reflection_sprite.push(sprite) @reflecting_events.push($game_map.events[i]) end end @reflection_sprite = Sprite_Reflect.new(@viewport1, $game_player, 0) end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- alias tds_sprite_reflection_update update def update tds_sprite_reflection_update if $game_player.current_area_name == "Reflect" if $game_player.moving? == false @reflection_sprite.visible = true end else @reflection_sprite.visible = false end for i in [email=0...@reflecting_events.size][color=#075066]0...@reflecting_events.size[/color][/email] if @reflecting_events[i].current_area_name == "Reflect" if @reflecting_events[i].moving? == false @event_reflection_sprite[i].visible = true end else @event_reflection_sprite[i].visible = false end end if @reflection_sprite.visible == true @reflection_sprite.update end for i in [email=0...@event_reflection_sprite.size][color=#075066]0...@event_reflection_sprite.size[/color][/email] if @event_reflection_sprite[i].visible == true @event_reflection_sprite[i].update end end update_tilemap update_parallax update_characters update_shadow update_weather update_pictures update_timer update_viewports end end
#============================================================================== # ** Game_Character #------------------------------------------------------------------------------ # This class deals with characters. It's used as a superclass of the # Game_Player and Game_Event classes. #==============================================================================
class Game_Character
#-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :reflect_offset # Character Reflection Offset #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- alias tds_sprite_reflection_initialize initialize def initialize tds_sprite_reflection_initialize @reflect_offset = 0 end #-------------------------------------------------------------------------- # * Current Area Name #-------------------------------------------------------------------------- def current_area_name # Checks the areas in the maps for area in $data_areas.values # If the character is currently on an area if in_area?(area) == true # Give the value of the name of the area to the return variable return_area_name = area.name # Break loop break end end return return_area_name end end
#============================================================================== # ** Game_Event #------------------------------------------------------------------------------ # This class deals with events. It handles functions including event page # switching via condition determinants, and running parallel process events. # It's used within the Game_Map class. #==============================================================================
class Game_Event < Game_Character #-------------------------------------------------------------------------- # * Clear Starting Flag #-------------------------------------------------------------------------- def name return @event.name end #-------------------------------------------------------------------------- # * Determine if in Area # area : Area data (RPG::Area) #-------------------------------------------------------------------------- def in_area?(area) return false if area == nil return false if $game_map.map_id != area.map_id return false if @x < area.rect.x return false if @y < area.rect.y return false if @x >= area.rect.x + area.rect.width return false if @y >= area.rect.y + area.rect.height return true end end
2. Ensuite créer un "Area" sous le nom de "Reflect". Dans l'exemple de ma photo, j'ai besoin de créer deux "Area" sous le nom de "Reflect" - un pour chaque cours d'eau. - Spoiler:
3. Maintenant, vous devez déterminer la position du "Area" selon la région où vous voulez avoir de la réflexion. Pour faire ainsi, cliquer sur l' "Area" désirer puis cliquer sur "Espace" sur votre clavier. Vous devriez voir cette boite ; - Spoiler:
5. Maintenant, créer un "EVENT" afin de créer un "NPC" sur la carte. Il est important de nommer cet "EVENT" sous le nom de "REFLECT". Puis lorsque cet "EVENT" passe dans la zone déterminer au numéro 4, sont "SPRITE" est réfléchie sur la case juste en dessous. - Spoiler:
TERMINER NOTE : Si vous voulez que le reflet soit plus loin, changer simplement le nom de l' "EVENT" pour "Reflect /OFFSET[40]" au lieu de juste "REFLECT" comme mentionné au numéro 5 ci-haut. - Spoiler:
NOTE2 : Votre personnage est automatiquement réfléchie dans les ZONE "REFLECT" désignée. Seul les "NPC" doivent avoir le nom de leur "EVENT" appeler "REFLECT". | |
|
Naqqah Administrateur
Nombre de messages : 844 Age : 28 Localisation : Parti manger un ours Date d'inscription : 22/02/2009
| Sujet: Re: [VX]Reflet/Reflexion Jeu 23 Déc - 22:38 | |
| Je connaissais ça. Merci pour le partage ! | |
|