Laugilus
Bourgeois (Nv 5)
Nombre de messages : 283
Age : 32
Point(s) Fort(s) : ...
Point(s) Faible(s) : ...
Niveau RPG Maker : ...
Logiciel préféré : RMXP
Date d'inscription : 11/08/2006
|
Sujet: Système de détection du héros Ven 11 Juil 2008 - 16:59 |
|
|
Système de détection du héros
Auteur : Laugilus
Ce système permet à des évènements de repérer le héros de deux manières différentes. Les évènement ont donc deux champs de vision : - Un circulaire - Un ovale
Il est possible de spécifier l'intégralité des paramètres pour les champs de vision. Le système permet éventuellement d'activer un interrupteur local (A, B, C ou D, au choix ) de l'évènement concerné lorsque le héros est repéré par l'évènement.
Il est également possible de faire plusieurs évènements qui repèrent le héros sur la même map.
Utilisation : Dans un évènement (n'importe lequel, ça peut être ou non celui qui doit posséder le champ de vision), dans une page en processus parallèle, mettre : - Citation :
- Script : @d = Detection.new(X)
Remplacez X par l'id/le numéro de l'évènement qui doit posséder le champ de vision.
Selon ce que vous souhaitez, il y a ensuite plusieurs utilisations :
Champ de vision en cercle - En activant un interrupteur : A la suite, faites : - Citation :
- Script : @d.circle(Rayon, 'B')
- Remplacez Rayon par le rayon du champ de vision. - Ceci activera l'interrupteur local B de l'évènement qui possède le champ de vision lorsque l'évènement verra le héros, dès que le héros entre dans le champ de vision circulaire. Exemple : - Citation :
- Script : @d.circle(5, 'A')
- Sans activer d'interrupteur : A la suite, faites une condition, et mettez comme paramètre script. Ensuite, tapez ceci dans la condition : - Citation :
- @d.circle(Rayon)
Remplacez Rayon par le rayon du champ de vision.
Champ de vision ovale - En activant un interrupteur : A la suite, faites : - Citation :
- Script : @d.ellipse(Longueur, Largeur, 'C')
- Remplacez Longueur et Largeur par la longueur et la largeur du champ de vision. - Ceci activera l'interrupteur local C de l'évènement qui possède le champ de vision lorsque l'évènement verra le héros, dès que le héros entre dans le champ de vision ovale.
- Sans activer d'interrupteur : A la suite, faites une condition, et mettez comme paramètre script. Ensuite, tapez ceci dans la condition : - Citation :
- @d.ellipse(Longueur, Largeur)
Remplacez Longueur et Largeur par la longueur et la largeur du champ de vision.
Exemple : Champ de vision circulaire sans activer d'interrupteur
Script :
Insérez un nouveau script au dessus de Main, et nommez-le : Laugilus_eSt_SadiquE. Attention, respectez bien les majuscules, sinon ça ne marchera pas !
- Code:
-
#=============================================================================== # Système de détection du héros #------------------------------------------------------------------------------- # Auteur : Laugilus # Version : 0.1 # Date : 11/07/2008 #-------------------------------------------------------------------------------
class Detection def initialize(event_id) @event_id = event_id end def distance(racine=true) if racine return (($game_player.x - $game_map.events[@event_id].x)**2 + ($game_player.y - $game_map.events[@event_id].y)**2).to_f**0.5 else return ($game_player.x - $game_map.events[@event_id].x)**2 + ($game_player.y - $game_map.events[@event_id].y)**2 end end def circle(r, switch=nil) r *= r if distance(false) <= r unless switch.nil? key = [$game_map.map_id, @event_id, switch] $game_self_switches[key] = true $game_map.events[@event_id].refresh end return true end end def ellipse(longueur, largeur, switch=nil) @x_event = $game_map.events[@event_id].x @y_event = $game_map.events[@event_id].y @x = $game_player.x @y = $game_player.y longueur = longueur.to_f/2 largeur = largeur.to_f/2 distance_foyers = (longueur**2-largeur**2).to_f**0.5 @direction = $game_map.events[@event_id].direction if @direction == 2 @x_foyer = @x_event @y_foyer = @y_event + distance_foyers*2 elsif @direction == 8 @x_foyer = @x_event @y_foyer = @y_event - distance_foyers*2 elsif @direction == 4 @x_foyer = @x_event - distance_foyers*2 @y_foyer = @y_event elsif @direction == 6 @x_foyer = @x_event + distance_foyers*2 @y_foyer = @y_event end @equation = (((largeur**2 + distance_foyers**2).to_f**0.5)*2).round @distance_heros_foyers = distance(true) + ((@x_foyer-@x)**2 + (@y_foyer-@y)**2).to_f**0.5 @distance_heros_foyers = @distance_heros_foyers.round if @distance_heros_foyers <= @equation unless switch.nil? key = [$game_map.map_id, @event_id, switch] $game_self_switches[key] = true $game_map.events[@event_id].refresh end return true end end end PS : Si vous utilisez ce système, merci de me mettre dans vos crédits.
|
|