AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Système d'ombre basique [Résolu]

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Système d'ombre basique [Résolu]   Ven 22 Aoû 2014 - 12:29

Bonjour,

J'ai voulus créer des ombres très basique pour mon projet et donc j'ai utiliser comme script :
Code:

// Distance entre l'ombre et l'objet
var distance = argument0;


    if ( instance_exists(obj_light) and collision_circle(x,y,64,obj_player,false,false) )
    {
    //
    }
    else
    {
        if last_key == 4 draw_sprite_ext(sprite_index, image_index, x, y+sprite_height-distance, 1, -1, image_angle, c_black, global.shawlpha);
        else draw_sprite_ext(sprite_index, image_index, x, y+sprite_height-distance, -1, -1, image_angle, c_black, global.shawlpha);
        draw_self();
    }

Donc il fonctionne bien mais j'aimerais encore l'améliorer, en effet le script superpose les ombres, or ça ne fait pas très beau, quelqu'un sait comment remédier au problème ?
J'ai déjà essayé avec les surfaces mais ça consomme beaucoup trop de ressources :s

Merci


Dernière édition par Mamie Wawa le Sam 6 Sep 2014 - 15:34, édité 1 fois
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: Re: Système d'ombre basique [Résolu]   Ven 22 Aoû 2014 - 14:14

Il faudrait en bref que tu dessine les ombres sur une surface avec l'alpha 1, mais que tu dessine la surface avec une alpha style 0.3.

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Ven 22 Aoû 2014 - 14:50

J'ai essayé de faire ça dans le script:
Code:

draw_set_alpha(1);
shadow = surface_create(sprite_width,sprite_height);
surface_set_target(shadow);
draw_clear_alpha(c_black,1);

surface_set_target(shadow);
draw_clear(c_black);
draw_sprite_ext(sprite_index, image_index, x, y+sprite_height-distance, -1, -1, image_angle, c_black, 0.4);
surface_reset_target();

Mais ça ne fonctionne pas
Code:
############################################################################################
ERROR in
action number 1
of Draw Event
for object obj_player:

Invalid surface dimensions
 at gml_Script_scr_shadow (line 20) - shadow = surface_create(sprite_width,sprite_height);
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_scr_shadow (line 20)
called from - gml_Object_obj_player_DrawEvent_1 (line 11) - scr_shadow(8);

Ça me dit dimensions invalide mais pourtant sprite_width et sprite_height retourne bien les dimensions du sprite non ? Pourquoi ça ne marcherait pas ?
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: Re: Système d'ombre basique [Résolu]   Ven 22 Aoû 2014 - 15:31

Oulala tu es complètement à côté de la plaque ^^'
Tu as essayé de reproduire le comportement normal du draw mais avec une surface, c'est bien pire ^^'

Essaie plutôt :

Code:
// Event room create d'un objet control
globalvar srf_shadow;
srf_shadow = surface_create(view_wview[0], view_hview[0]);

// Event draw de l'objet controlleur
surface_draw_ext(view_xview[0], view_yview[0], 1, 1, 0, c_black, 0.3); // pas sûr des args

// Event draw (Mets-y en step si ça ne marche pas!) de l'objet controlleur
surface_set_target(srf_shadow);
draw_clear_alpha(c_black, 0.0);
surface_reset_target();

// Event room end de l'objet control
surface_destroy(srf_shadow);

// Event draw (Mets-y en step si ça ne marche pas!) des objets qui doivent posséder une ombre
surface_set_target(srf_shadow);
draw_sprite_ext(sprite_index, image_index, x, y+sprite_height-distance, -1, -1, image_angle, c_black, 0.4);
surface_reset_target();
C'est un peu "dirty" mais ça devrait faire l'affaire.

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Ven 22 Aoû 2014 - 17:52

Oui niveau surface je débute juste, donc c'est un peu confus pour moi, sinon j'ai essayé ton code ( et changé 2-3 fonctions qui était mal épelé ou bien inexistant )
Et malheureusement ça me dessine aucune ombre Sad

Voici le code :

Event create de mon objet controller :
Code:
global.srf_shadow = surface_create(640,480)
draw_surface_ext(global.srf_shadow, view_xview[0], view_yview[0], 1, 1, 0, c_black, 0.3); // pas sûr des args

Event draw de mon objet controller :
Code:
surface_set_target(global.srf_shadow);
draw_clear_alpha(c_black, 0.0);
surface_reset_target();

Et l'event draw de mes objets ayant une ombre :
Code:
var distance = argument0;

// Event draw (Mets-y en step si ça ne marche pas!) des objets qui doivent posséder une ombre
surface_set_target(global.srf_shadow);
draw_sprite_ext(sprite_index, image_index, x, y+sprite_height-distance, -1, -1, image_angle, c_black, 0.4);
surface_reset_target();

Je vais encore relire pour voir si je me suis trompé quelque part scratch
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: Re: Système d'ombre basique [Résolu]   Ven 22 Aoû 2014 - 18:20

Je sais pas si GM:S supporte le set target en event draw :/ essaie de passer en event step

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Ven 22 Aoû 2014 - 18:31

Ça fonctionne pas non plus Sad
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: Re: Système d'ombre basique [Résolu]   Ven 22 Aoû 2014 - 18:36

L'objet controller est à quelle depth?

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Ven 22 Aoû 2014 - 18:39

Au dessus de tout ( il fait aussi office d'hud )
Faut qu'il soit en dessous ?

Aussi lorsque je switch entre fullscreen / windowed mode ça me fait un gros bordel dans le jeu  ouh 
Parfois les ombres se dessinent parfois, parfois pas, les objets disparaissent aussi, jpense que c'est à voir avec le controller avec sa position x,y mais je vois pas pourquoi ça ferai ça Sad
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: Re: Système d'ombre basique [Résolu]   Ven 22 Aoû 2014 - 20:06

Je viens de remarquer que tu as fait un truc très bizarre... Pourquoi tu essaie de draw la surface dans l'event create? Il faut la créer plutôt.

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Ven 22 Aoû 2014 - 21:15

Ok j'ai juste laisser le create, mais ça change rien, les ombres n'apparaissent pas et les graphiques du jeu font un gros bug visuel quand je switch en fullscreen/windowed :/

Et au final c'est assez aléatoire, les éléments disparaissent, les ombres parfois ,parfois pas, je comprend pas trop scratch
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: Re: Système d'ombre basique [Résolu]   Sam 23 Aoû 2014 - 7:15

C'est quoi ton code actuel?

(Au passage le switch windowed/fullscreen c'est normal ça fait sauter la surface, il faudra faire quelque chose pour la recréer)

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Sam 23 Aoû 2014 - 12:36

Au final j'ai:
Event create de mon objet controller :
Code:
global.srf_shadow = surface_create(view_wview,view_hview)

Event step de mon objet controller :
Code:
surface_set_target(global.srf_shadow);
draw_clear_alpha(c_black, 0.0);
surface_reset_target();

Et l'event draw de mes items qui possèdent une ombre :
Code:
var distance = argument0;

// Event draw (Mets-y en step si ça ne marche pas!) des objets qui doivent posséder une ombre
surface_set_target(global.srf_shadow);
draw_sprite_ext(sprite_index, image_index, x, y+sprite_height-distance, -1, -1, image_angle, c_black, 0.4);
surface_reset_target();
draw_self()

Sinon j'ai essayé de mettre :
Code:
surface_reset_target();
Ou bien encore:
Code:
global.srf_shadow = surface_create(view_wview,view_hview)

Dans l'event switch fullscreen/windowed mode mais rien n'y change
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: Re: Système d'ombre basique [Résolu]   Sam 23 Aoû 2014 - 12:40

Essaie de mettre
Code:
surface_set_target(global.srf_shadow);
draw_sprite_ext(sprite_index, image_index, x, y+sprite_height-distance, -1, -1, image_angle, c_black, 0.4);
surface_reset_target();
en step

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Sam 23 Aoû 2014 - 12:54

Tu veux dire pour le draw event des items à ombre non ?
Parce que la ça dessinerai juste l'ombre du controller qui a pas de sprite scratch

Donc j'ai essayé quand même, ça a pas fonctionné :/
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: Re: Système d'ombre basique [Résolu]   Sam 23 Aoû 2014 - 12:57

Désolé mais je sais vraiment pas comment les surfaces marchent sous gm:s :s

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Dim 24 Aoû 2014 - 16:49

Dommage, quelqu'un aurait une solution ? Les surfaces c'est pas trop mon truc, et même en lisant le manuel de game maker y a rien qui me parle pour ce que je voudrais faire scratch
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Système d'ombre basique [Résolu]   Dim 24 Aoû 2014 - 18:44

J'y connais pas grand chose niveau surface et j'ai pas étudié ton code à fond, mais moi je verrais la logique différemment : tu prend un objet spécial que tu dédie à tes ombres (ou un objet Main qui gère tout le bordel (genre hud,etc...), peu importe) et tu fais un for avec tous les objets et tu dessine leur ombre SANS utiliser de surface, en dessinant dans le buffer de base. Faut juste que ton objet est la depth la plus élevée pour qu'il affiche tout en dessous des objets.
Comme dit je suis ptet à côté de la plaque et c'est pas le résultat que tu attends, si c'est le cas autant pour moi.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Dim 24 Aoû 2014 - 18:45

Ça reviendrai à la même que mon problème de base, les ombres se superposeraient, et c'est l'effet indésiré scratch
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Système d'ombre basique [Résolu]   Dim 24 Aoû 2014 - 18:53

Ouais mais je comprend pas alors, tu veux obtenir quoi avec tes surfaces ?
Un truc de ce genre en partant du principe que les deux triangles sont deux ombres ?
Code:
 a1(before)     +         a2         =     a1(after)

     ################     ################     ################
     ##############         ##############     ################
     ############             ############     ################
     ##########                 ##########     ################
     ########                     ########     ################
     ######                         ######     ######    ######
     ####                             ####     ####        ####
     ##                                 ##     ##            ##
 
Dans ce cas ce sera pas réaliste, en vrai quand t'as plusieurs sources de lumières tu peux avoir des ombres qui se chevauchent avec plusieurs degrés d'opacité.
Si t'avais un schéma je pense que ce serait plus clair.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Lun 25 Aoû 2014 - 1:04

Oui comme tu l'as fais sur ton chemin, et c'est vrai aussi que ton explication sur la réalité des ombres est correcte mais c'est juste que je fais un jeu 2D, et que je peux me déplacer de bas en haut, de gauche à droite, et que certains de la map je peux passer derrière eux, ainsi ça fera une seconde couche d'ombre sur celle déjà présente de l'élément, alors que ça ne devrait pas :/

Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Lun 1 Sep 2014 - 12:12

Coucou, j'ai finalement résolus ce problème d'ombre superposés ( avec les surfaces ! Smile )
Mais maintenant j'ai un soucis qui vient de gm, je n'ai aucune idée du pourquoi du comment ;
Vu que mes ombres sont censé être des ombres j'ai mis leurs depth la plus basse ( pour qu'ils soient en dessous de tous les objets du jeu ) mais quand je fais ça et que je bouge avec mon personnage il y a un décalage avec les ombres, elles bougent aussi puis reviennent à leur place une fois que j'arrête de bouger le personnage
Mais quand je met la depth au dessus de tout ( mais donc les ombres se dessinent par dessus les éléments du jeu et c'est pas l'effet recherché ^^' ) là le problème est réglé, les ombres sont statiques, elles ne bougent plus

Donc ça vient de la depth dont ce soucis de décalage provient, mais je ne vois pas comment le régler ( c'est vraiment étrange )
Mon code:
Event create de mon objet shadow
Code:
/// Créer la surface shadow
global.shadow = surface_create(640,480);
Event end step:
Code:
/// Créer la surface shadow si elle n'existe pas
if ( !surface_exists(global.shadow) )
{
    global.shadow=surface_create(view_wview,view_hview);
}
x = view_xview
y = view_yview
Code:

// Draw shadow
if ( surface_exists(global.shadow) )
{
    draw_set_alpha(global.shawlpha)
    draw_surface(global.shadow,view_xview,view_yview)
    surface_set_target(global.shadow)
    draw_clear_alpha(c_black,0)
    surface_reset_target()
}

Et le script pour dessiner les ombres de mes objets:
Code:

if surface_exists(global.shadow)
{
surface_set_target(global.shadow)
draw_sprite_ext(sprite_index, image_index, x-view_xview, y+sprite_height-view_yview-distance, 1, -1, image_angle, c_black, 1);
surface_reset_target();
}

J'ai essayé d'enlever le step event mais ça change rien au soucis, je suis bloqué à nouveau Sad
Revenir en haut Aller en bas
GDOR1
Très bonne participation
avatar

Messages : 130

MessageSujet: Re: Système d'ombre basique [Résolu]   Lun 1 Sep 2014 - 13:45

Dans GM, je crois que l'ordre d'exécution des objets se fait selon le depth. Donc d'après ta description, ça voudrait dire que l'objet shadow s'exécute avant l'objet qui dessine sur la surface.
Donc regarde si le problème ne vient tout simplement pas du step que t'as choisi.

Quand je dessine des ombres, j'ai l'habitude de faire ça :
Begin step de l'objet shadow : draw_clear_alpha(c_black,0) sur la surface.
Step des autres objets : tout sauf dessiner l'ombre
End step des autres objets : dessiner l'ombre
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Lun 1 Sep 2014 - 14:46

J'ai fais comme tu me l'as conseillé mais ça change rien, c'est toujours le même soucis Sad
J'ai même essayé après post draw/predraw, etc... soit ça m'affiche plus ombres soit ça me les affiche par dessus les objets...
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: Re: Système d'ombre basique [Résolu]   Lun 1 Sep 2014 - 15:09

GDOR1 a écrit:
Dans GM, je crois que l'ordre d'exécution des objets se fait selon le depth.

Seulement l'event draw en fait.
Les event step, etc. ne s'exécutent que selon l'id.

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
red-error
Utilisateur confirmé: Rang ****
avatar

Messages : 1015
Projet Actuel :

MessageSujet: Re: Système d'ombre basique [Résolu]   Lun 1 Sep 2014 - 15:09

( End step se fait avant le draw
http://gmc.yoyogames.com/index.php?showtopic=337904 )

Tout ce qui est affichage doit se faire dans les draws, et les déplacements hors des draws, dans les step, sinon ça marche pas.
Je crois pas que t'aies mis un code de déplacement dans les draw...


Donc le problème vient peut-être de la vue qui est pas mise à jour en même temps?
La vue se déplace quelque part entre step et draw.
Hors tu mets x = view_xview dans l'event step-> du coup tu as peut-être enregistré l'ancienne position de ta vue?


Dernière édition par red-error le Lun 1 Sep 2014 - 15:14, édité 2 fois
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8924
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Système d'ombre basique [Résolu]   Lun 1 Sep 2014 - 15:12

red-error a écrit:
( End step se fait avant le draw
http://gmc.yoyogames.com/index.php?showtopic=337904 )

Dépend des versions de GM ça, sous 6,7 et 8, le draw se fait avant les events step.
Suffit de faire un show message/error pour vérifier sous GMS sinon.

_________________
                 
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Système d'ombre basique [Résolu]   Lun 1 Sep 2014 - 15:18

red-error a écrit:
Tout ce qui est affichage doit se faire dans les draws, et les déplacements hors des draws, dans les step, sinon ça marche pas.
Effectivement, ca serait très intelligent de la part de GM de n'exécuter les events draw uniquement des objets qui sont visible dans la view (ou ceux qu'on choisiraient, genre les objets qui dessinent tout ce qui est hud), mais c'est pas le cas... Donc t'es pas obligé de mettre les mouvements dans le step plutôt que dans le draw, meme si ca parait plus logique.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Système d'ombre basique [Résolu]   Lun 1 Sep 2014 - 15:26

J'ai déjà essayé de delete les step event de mon objet shadow le problème persiste, donc ça vient pas des step event... crossa scratch
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Système d'ombre basique [Résolu]   Lun 1 Sep 2014 - 15:35

Bon, j'ai vraiment lu le truc et red-error a surement raison :
"Donc le problème vient peut-être de la vue qui est pas mise à jour en même temps?
La vue se déplace quelque part entre step et draw.
Hors tu mets x = view_xview dans l'event step-> du coup tu as peut-être enregistré l'ancienne position de ta vue?"
Donc soit tu change d'event l'update, soit tu vire les options following object et tu le fais toi même au bon endroit.

Vu le nombre de problème qu'occasionne ce système d'ombres "basique", je pense que tu devrais te concentrer sur d'autres tâches plus importantes et y revenir plus tard, quand t'aura un truc déjà jouable et plus d'expérience. Outre le fait que tu pers un temps fou pour un truc dispensable, c'est le meilleur moyen de te démotiver.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Système d'ombre basique [Résolu]   

Revenir en haut Aller en bas
 
Système d'ombre basique [Résolu]
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» de l'ombre à la lumière...........
» ça me fout les glandes, casse toi tu pu, et marche à l'ombre
» Sous l'ombre des pommiers - Yves Jacob
» [Système d'imposition] Imposition négative et taux fixe ?
» Recherche d'un emploi d'ingénieur système orienté Linux... En Italie

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: