Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 Lumière révélatrice (décor caché) [RESOLU]

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1115

Date d'inscription : 15/10/2007


MessageSujet: Lumière révélatrice (décor caché) [RESOLU]   Mer 18 Jan 2017 - 16:25

Salut tout le monde,

Savez-vous comment je pourrais programmer une lampe qui émette un faisceau susceptible de révéler des inscriptions cachées, comme la lampe bleue utilisée dans les enquêtes policières?

J’imagine qu’il faut un deuxième décor et un sprite dynamique. Je sais que le module Flashlight les gère mais je ne sais pas comment procéder.

Une petite idée?


Dernière édition par Creamy le Lun 23 Jan 2017 - 20:37, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://creamy.unblog.fr/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2510

Date d'inscription : 01/08/2006


MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Mer 18 Jan 2017 - 17:09

Je n'ai jamais utilisé Flashlight, mais ça semble être un module assez efficace. Seulement là comme ça, je sais pas ce qu'il faudrait y modifier pour ajouter la révélation des inscriptions cachées.

Selon l'implémentation que tu envisages les solutions sont plus ou moins directes à implémenter. Mettons que ton idée soit que lorsqu'on utilise la lampe, tout l'écran à l'exception du faisceau lumineux devienne noir. Dans ce cas, il "suffit" de remplacer l'image d'arrière-plan de la pièce par une image qui contient les écritures, et ensuite le joueur ou la joueuse balaiera l'écran pour scruter les écritures. Dans ce cas-là je pense que tu peux directement utiliser le module Flashlight tel quel.

En revanche si ton idée est plutôt de "surimposer" un faisceau lumineux sur l'image d'arrière-plan, et de révéler des écritures uniquement là où le faisceau lumineux se trouve, c'est un peu plus technique. Une méthode serait d'utiliser un GUI pour représenter le faisceau, dont l'image d'arrière-plan serait une sprite dynamique. Ça consisterait globalement à avoir dans ton projet une image de la taille de ton écran/de ta pièce qui contient uniquement les écritures sur fond transparent. Sur cette base, tu crées ensuite une sprite dynamique (CreateFromExistingSprite) que tu recadres aux coordonnées de la souris et aux dimensions du faisceau, à l'aide de la commande Crop. Pour lui donner un aspect arrondi, tu peux utiliser une image masque (un rond/une ellipse noire sur un fond transparent) à l'aide de la commande CopyTransparencyMask. Puis tu assignes la sprite dynamique obtenue comme image d'arrière-plan à ton GUI, GUI que tu places aux coordonnées de ta souris. Bien sûr tu répètes ces étapes à chaque cycle (cela-dit pour libérer un peu de mémoire, tu peux ajouter une condition qui n'enclenche le processus que si les coordonnées de la souris soit différentes de celles du cycle précédent).

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1115

Date d'inscription : 15/10/2007


MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Mer 18 Jan 2017 - 22:05

Vous êtes un puits de science, André.
Merci  sourire Je vais essayer ça.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://creamy.unblog.fr/
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1115

Date d'inscription : 15/10/2007


MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Ven 20 Jan 2017 - 12:59

J'arrive à dessiner un sprite sur un masque. Par contre, le sprite dessiné bouge avec le GUI, comme si j'avais utilisé une image normale.

Code:
// room script file
DynamicSprite* sprite;


function room_Load()
{
gHalo.Clickable = false;
}

function room_RepExec()
{  
sprite = DynamicSprite.CreateFromBackground();
DrawingSurface *surface = Room.GetDrawingSurfaceForBackground();
surface.DrawImage(0, 0, sprite.Graphic);

http://sprite.Crop(10, 10, sprite.Width - 10, sprite.Height - 10);
sprite.CopyTransparencyMask(227);

gHalo.X=mouse.x;
gHalo.Y = mouse.y;
gHalo.BackgroundGraphic = sprite.Graphic;
}

Aussi, la commande "crop" fait planter le jeu :
Citation :
DynamicSprite.CopyTransparencyMask: sprites are not the same size
Le masque (sprite 227) et l'image du décor (sprite 228) sont de même taille pourtant. C'est la taille après découpage qui est prise en compte?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://creamy.unblog.fr/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2510

Date d'inscription : 01/08/2006


MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Ven 20 Jan 2017 - 14:34

Hm, je suis pas sûr de comprendre la logique derrière ton code.
Là, tu crées une copie de l'image d'arrière-plan dans sprite. Puis, tu dessines cette copie d'image d'arrière-plan sur l'arrière-plan lui-même (sprite) aux coordonnées (0,0).
Enfin, tu appliques le masque de transparence sur sprite, que tu définis comme arrière-plan pour gHalo (lequel est placé aux coordonnées de la souris).
À mon sens, les lignes 13 et 14 n'ont aucune utilité réelle, elles n'ont aucun effet visible (elles copient juste une image sur elle-même).

Creamy a écrit:
C'est la taille après découpage qui est prise en compte?
Oui : il faut qu'au moment d'appliquer le masque, le sprite sur lequelle tu appliques le masque soit exactement aux mêmes dimensions.

Mon idée était plutôt la suivante (code non testé) :
Code:
// room script file

// NUMERO_SPRITE_TEXT contient une image aux mêmes dimensions que l'arrière-plan
// et contient uniquement le texte à révéler, sur fond transparent
#define NUMERO_SPRITE_TEXT 20
// NUMERO_SPRITE_BEAM contient une image qui représente le faisceau lumineux uniquement
// Typiquement une ellipse sur fond transparent (voire canal alpha)
#define NUMERO_SPRITE_BEAM 21

DynamicSprite* sprite;

function room_Load()
{
        gHalo.Clickable = false;
}
 
function room_RepExec()
{
        sprite = DynamicSprite.CreateFromExistingSprite(NUMERO_SPRITE_TEXT);
        sprite.Crop(GetViewportX()+mouse.x, GetViewportY()+mouse.y,
                    Game.SpriteWidth[NUMERO_SPRITE_BEAM], Game.SpriteHeight[NUMERO_SPRITE_BEAM]);
        sprite.CopyTransparencyMask(NUMERO_SPRITE_BEAM);

        gHalo.X=mouse.x;
        gHalo.Y = mouse.y;
        gHalo.BackgroundGraphic = sprite.Graphic;
}

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1115

Date d'inscription : 15/10/2007


MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lun 23 Jan 2017 - 20:33

Citation :
À mon sens, les lignes 13 et 14 n'ont aucune utilité réelle, elles n'ont aucun effet visible (elles copient juste une image sur elle-même).

Comme ça ne marchait pas, j’avais tenté de modifier des trucs - en l'occurence de remplacer ton « CreateFromExistingSprite » par un « CreateFromBackground » en utilisant un gros objet pour faire le 2e décor. Je te concède que ça ne sert à rien  grand sourire

Citation :
Oui : il faut qu'au moment d'appliquer le masque, le sprite sur lequelle tu appliques le masque soit exactement aux mêmes dimensions.
OK. Maintenant, le sprite est découpé aux bonnes dimensions.

C'est le "GetViewport" qui me manquait. Je n'avais pas compris que c'était le déplacement du découpage qui créait l'illusion.

Maintenant ça fonctionne au poil, merci Kitai sourire
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://creamy.unblog.fr/
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1115

Date d'inscription : 15/10/2007


MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Mar 24 Jan 2017 - 9:02

J’ai une question bonus : pourquoi le halo ne fonctionne plus quand on essaye de remplacer tous les "mouse" par des "player" pour le faire suivre un perso ?
Code:

sprite.Crop(GetViewportX()+player.x, GetViewportY()+player.y, Game.SpriteWidth[NUMERO_SPRITE_BEAM], Game.SpriteHeight[NUMERO_SPRITE_BEAM]);
        sprite.CopyTransparencyMask(NUMERO_SPRITE_BEAM);
gHalo.X= player.x;
gHalo.Y = player.y;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://creamy.unblog.fr/
Arlann
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar

Nombre de messages : 176

Date d'inscription : 06/04/2016


MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Mar 24 Jan 2017 - 11:51

Les valeurs X et Y des guis et de la souris font références à la résolution de ton jeu, celles des personnages font références à la résolution de tes pièces, si elles sont en scrolling je pense que tu dois compenser avec GetViewportX et GetViewportY.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1115

Date d'inscription : 15/10/2007


MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Mar 24 Jan 2017 - 12:56

Ah oui, la pièce où j'ai tenté le halo sur le perso est plus large que l'écran.
Merci Arlann, j'aurais dû y penser sourire
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://creamy.unblog.fr/
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1115

Date d'inscription : 15/10/2007


MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lun 30 Jan 2017 - 18:51

Désolé d'abuser de votre temps, mais j'ai encore un problème avec le halo dynamique qui suit un perso.

EDIT : Problème résolu.

Code pour que le halo suive un personnage :
Code:
function repeatedly_execute_always()
{
  // Put your script code here
sprite = DynamicSprite.CreateFromExistingSprite(228);
sprite.Crop(player.x-50, player.y-50, 100, 100);
sprite.CopyTransparencyMask(227);

gHalo.X= player.x - GetViewportX() - 50;
gHalo.Y = player.y - GetViewportY() - 50;
gHalo.BackgroundGraphic = sprite.Graphic;
gHalo.Clickable = false;
}

Code pour que le halo suive la souris :
Code:
function repeatedly_execute_always()
{
  // Put your script code here
sprite = DynamicSprite.CreateFromExistingSprite(228);
sprite.Crop(GetViewportX()+ mouse.x - 50, GetViewportY()+ mouse.y -50, 100, 100);
sprite.CopyTransparencyMask(227);
gHalo.X= mouse.x - 50;
gHalo.Y = mouse.y -50;
gHalo.BackgroundGraphic = sprite.Graphic;
gHalo.Clickable = false;
}


Dernière édition par Creamy le Lun 20 Fév 2017 - 23:43, édité 6 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://creamy.unblog.fr/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2510

Date d'inscription : 01/08/2006


MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lun 30 Jan 2017 - 22:01

En fait dans la mesure où ta sprite 228 fait les dimensions de l'arrière-plan de la pièce, il ne faut pas que tu utilises GetViewportX/Y dans la fonction Crop avec le personnage. Ses coordonnées étant déjà relatives à la pièce, et non pas relatives à l'écran (contrairement aux coordonnées de la souris -- raison pour laquelle j'utilise GetViewportX/Y dans le code que je t'ai proposé plus haut -- je suis d'ailleurs surpris que le code que tu as posté pour la souris fonctionne normalement), il te suffit de passer player.x-50 et player.y-50 comme coordonnées.

PS : les lignes avec surface sont inutiles dans ces codes, et elles sont potentiellement assez gourmandes lorsque répétées à chaque cycle comme ça.

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1115

Date d'inscription : 15/10/2007


MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Mar 31 Jan 2017 - 13:08

OK, je m'étais embrouillé avec ces histoires de coordonnées mais maintenant tout fonctionne. J'ai corrigé le code de mon message précédent. J'ai aussi enlevé les lignes avec surface.

Citation :
je suis d'ailleurs surpris que le code que tu as posté pour la souris fonctionne normalement
Tu as raison, j'avais oublié de remettre les GetViewport. C'est aussi corrigé.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://creamy.unblog.fr/
Contenu sponsorisé




MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   

Revenir en haut Aller en bas
 
Lumière révélatrice (décor caché) [RESOLU]
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [RESOLU]lumière centrale qui reste bleue ?
» [extrait de WoW RPG & autres sources] La Lumière.
» 4.0.1 et tangibilité de la Lumière
» Le pouvoir et la lumière sont en toi(Libre)
» [Software] Jeux Bonus d'après BIONICLE 1, le Mask de Lumière. (y compris un test de "Toa" )

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: