Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
SSD interne Crucial BX500 2,5″ SATA – 500 ...
Voir le deal
29.99 €

 

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

Aller en bas 
3 participants
AuteurMessage
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Creamy


Nombre de messages : 1266

Date d'inscription : 15/10/2007


Lumière révélatrice (décor caché) [RESOLU] Empty
MessageSujet: Lumière révélatrice (décor caché) [RESOLU]   Lumière révélatrice (décor caché) [RESOLU] EmptyMer 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
http://creamy.unblog.fr/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Lumière révélatrice (décor caché) [RESOLU] Empty
MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lumière révélatrice (décor caché) [RESOLU] EmptyMer 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
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
Creamy


Nombre de messages : 1266

Date d'inscription : 15/10/2007


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

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


Nombre de messages : 1266

Date d'inscription : 15/10/2007


Lumière révélatrice (décor caché) [RESOLU] Empty
MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lumière révélatrice (décor caché) [RESOLU] EmptyVen 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
http://creamy.unblog.fr/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Lumière révélatrice (décor caché) [RESOLU] Empty
MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lumière révélatrice (décor caché) [RESOLU] EmptyVen 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
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
Creamy


Nombre de messages : 1266

Date d'inscription : 15/10/2007


Lumière révélatrice (décor caché) [RESOLU] Empty
MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lumière révélatrice (décor caché) [RESOLU] EmptyLun 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
http://creamy.unblog.fr/
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Creamy


Nombre de messages : 1266

Date d'inscription : 15/10/2007


Lumière révélatrice (décor caché) [RESOLU] Empty
MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lumière révélatrice (décor caché) [RESOLU] EmptyMar 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
http://creamy.unblog.fr/
Arlann
Cliqueur Amateur
Cliqueur Amateur
Arlann


Nombre de messages : 286

Date d'inscription : 06/04/2016


Lumière révélatrice (décor caché) [RESOLU] Empty
MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lumière révélatrice (décor caché) [RESOLU] EmptyMar 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
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Creamy


Nombre de messages : 1266

Date d'inscription : 15/10/2007


Lumière révélatrice (décor caché) [RESOLU] Empty
MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lumière révélatrice (décor caché) [RESOLU] EmptyMar 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
http://creamy.unblog.fr/
Creamy
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Creamy


Nombre de messages : 1266

Date d'inscription : 15/10/2007


Lumière révélatrice (décor caché) [RESOLU] Empty
MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lumière révélatrice (décor caché) [RESOLU] EmptyLun 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
http://creamy.unblog.fr/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Lumière révélatrice (décor caché) [RESOLU] Empty
MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lumière révélatrice (décor caché) [RESOLU] EmptyLun 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
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
Creamy


Nombre de messages : 1266

Date d'inscription : 15/10/2007


Lumière révélatrice (décor caché) [RESOLU] Empty
MessageSujet: Re: Lumière révélatrice (décor caché) [RESOLU]   Lumière révélatrice (décor caché) [RESOLU] EmptyMar 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
http://creamy.unblog.fr/
Contenu sponsorisé





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

Revenir en haut Aller en bas
 
Lumière révélatrice (décor caché) [RESOLU]
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [résolu] IgnoreWalkbehinds > Objet Caché par un WalkBehinds
» [résolu]Comment importer un dessin papier/une photo dans AGS?resolu
» [résolu]Importation fichiers Speech, [résolu]idle View coupée, résolution bords
» Continuation And Truth
» Pieds derrière et mains devant un décor

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: