AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 draw_losange

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: draw_losange   Dim 2 Oct 2011 - 0:03

Bonsoir,

Il s'agit juste d'un petit script tout simple.
Il permet de réaliser un losange.
Il s'utilise de la même manière que draw_rectanle().
Son point d'origine est le sommet du haut.

Version zoulie:
Spoiler:
 


Version optimisé:
Code:

//draw_losange(x,y,size,outline);
draw_primitive_begin(argument3*pr_linestrip + (!argument3)*pr_trianglestrip);
    draw_vertex(argument0, argument1);
    draw_vertex(argument0+(argument2/2), argument1+(argument2/2));
    if (argument3)  draw_vertex(argument0, argument1+argument2);
    draw_vertex(argument0-(argument2/2), argument1+(argument2/2));
    if (argument3)  draw_vertex(argument0, argument1);
    else    draw_vertex(argument0, argument1+argument2);
draw_primitive_end();




Example dans ev_draw:
Code:
draw_losange(32,16,48,true);
draw_losange(100,16,48,false);


Dernière édition par Caly le Dim 2 Oct 2011 - 16:16, édité 2 fois
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1609
Localisation : Montpellier

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 1:05

À ta place je mettrais un if à la place du switch, et tu peux factoriser les instructions draw_... en-dehors dudit if Wink

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 7:13

Bonjour D-z,

Citation :
À ta place je mettrais un if à la place du switch, et tu peux factoriser les instructions draw_... en-dehors dudit if

Je n'est pas compris...
En fait je ne comprend pas ce qu'un if m'apporterais de plus qu'un switch.

Je suis un grand fan des switch, je trouve ça propre et clair.
Revenir en haut Aller en bas
Morwenn
Très bonne participation
avatar

Messages : 151
Projet Actuel : Icare

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 10:46

Voilà ce que te propose de faire D-z :

Code:

//draw_losange(x,y,size,outline);

var X, Y, D, O;
    X = argument0;
    Y = argument1;
    D = argument2;
    O = argument3;
 
if (O)
{
    draw_primitive_begin(pr_linestrip);
        draw_vertex(X, Y);
        draw_vertex(X+(D/2), Y+(D/2));
        draw_vertex(X, Y+D);
        draw_vertex(X-(D/2), Y+(D/2));
        draw_vertex(X, Y);
    draw_primitive_end();
}
else
{
    draw_primitive_begin(pr_trianglestrip);
        draw_vertex(X, Y);
        draw_vertex(X+(D/2), Y+(D/2));
        draw_vertex(X-(D/2), Y+(D/2));
        draw_vertex(X, Y+D);
    draw_primitive_end();
}

Lorsqu'on utilise un booléen, un if sera toujours plus intéressant à utiliser qu'un switch étant donné qu'il est justement là pour tester des conditions booléennes Wink

_________________

Dur Dabla, pour qui voudrait écouter un brin de metal celtique.
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1609
Localisation : Montpellier

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 10:58

Et même :
Code:
//draw_losange(x,y,size,outline);

var X, Y, D, O;
    X = argument0;
    Y = argument1;
    D = argument2;
    O = argument3;
 
if (O)
    draw_primitive_begin(pr_linestrip);
else
    draw_primitive_begin(pr_trianglestrip);

draw_vertex(X, Y);
draw_vertex(X+(D/2), Y+(D/2));
draw_vertex(X, Y+D);
draw_vertex(X-(D/2), Y+(D/2));
draw_vertex(X, Y);
draw_primitive_end();

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
avatar

Messages : 3325
Localisation : Dans une canonnière wookie.
Projet Actuel :
Things


MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 11:48

Y'a une utilité réelle d'associer chaque argument à une variable ou c'est juste par confort/condensation du script ?

_________________
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
onilink_
Modérateur
avatar

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

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 11:59

D-z a écrit:
Et même :
Code:
//draw_losange(x,y,size,outline);

var X, Y, D, O;
    X = argument0;
    Y = argument1;
    D = argument2;
    O = argument3;
 
if (O)
    draw_primitive_begin(pr_linestrip);
else
    draw_primitive_begin(pr_trianglestrip);

draw_vertex(X, Y);
draw_vertex(X+(D/2), Y+(D/2));
draw_vertex(X, Y+D);
draw_vertex(X-(D/2), Y+(D/2));
draw_vertex(X, Y);
draw_primitive_end();

et même
draw_primitive_begin(O*pr_linestrip + (!O)*pr_trianglestrip);
guns

_________________
                 
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1609
Localisation : Montpellier

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 12:12

J'étais pas sûr de pouvoir le mettre :p

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Morwenn
Très bonne participation
avatar

Messages : 151
Projet Actuel : Icare

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 13:56

D-z : Ouais, mais à trop réduire, on fait un draw_vertex() en trop dans un des deux cas, hein. Ce sont ne sont pas exactement les mêmes qui sont utilisés les deux fois^^"

Et puis bon, onilink_, c'est cool, mais niveau lisibilité, c'est pas tout à fait ça non plus x)

_________________

Dur Dabla, pour qui voudrait écouter un brin de metal celtique.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 14:10

Fin l'important c'est pas les begin et les end, c'est ce qu'il y a au milieu.
Sinon Mass normalement ça sert a rien ouai, on perd même des perfs avec création/destructions de variables locales au script supplémentaires.

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

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 14:31

Bonjour à tous.

Citation :
Lorsqu'on utilise un booléen, un if sera toujours plus intéressant à utiliser qu'un switch
On gagne des performances sur un if au lieu d'un switch?
Car personnellement j'utilise plus souvent des switch que des IF, je trouve ça plus clair.

Citation :
[...] draw_vertex() [...] Ce sont ne sont pas exactement les mêmes qui sont utilisés les deux fois^^"
Yep d'où le fait que je divise le tout en deux.
Si je ne me trompe pas on ne perd pas de performances car le pc ne lit pas es fausses conditions?

Citation :
draw_primitive_begin(O*pr_linestrip + (!O)*pr_trianglestrip);
Oulà c'est moche ça Razz
A part gagner une ligne de code ça sert réellement à quelque chose?

Citation :
on perd même des perfs avec création/destructions de variables locales au script supplémentaires
Je valide mais c'est quand même beaucoup plus lisible.
On perd vraiment beaucoup de performances ?

NB: Ce ne sont en aucun cas des affirmations mais des questions. (sauf pour la ligne moche de onilink_ Razz)
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 14:38

Pour tous les trucs énoncés les pertes de perfs sont minimes. Tu ne les sentirais qui si tu utilisais ton script énormément de fois (comme dans un double loop for quoi).
Sinon bof, le truc en une ligne je trouve ça compréhensible, j'ai déjà vu pire dans certains codes sources :p

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

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 15:06

Pour tout ceux qui aime l'optimisation voici ce que ça donne une fois compacté.

Code:
draw_primitive_begin(argument3*pr_linestrip + (!argument3)*pr_trianglestrip);
    draw_vertex(argument0, argument1);
    draw_vertex(argument0+(argument2/2), argument1+(argument2/2));
    if (argument3)  draw_vertex(argument0, argument1+argument2);
    draw_vertex(argument0-(argument2/2), argument1+(argument2/2));
    if (argument3)  draw_vertex(argument0, argument1);
    else    draw_vertex(argument0, argument1+argument2);
draw_primitive_end();

J'ai voulus remplacer
Code:
 if (argument3)  draw_vertex(argument0, argument1);
    else    draw_vertex(argument0, argument1+argument2);

par
Code:
argument3 ? draw_vertex(argument0, argument1)  : draw_vertex(argument0, argument1+argument2);

Mais ça ne fonctionne pas.
C'est quoi la bonne syntaxe en GML?
Revenir en haut Aller en bas
Morwenn
Très bonne participation
avatar

Messages : 151
Projet Actuel : Icare

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 15:50

L'opérateur ternaire n'existe simplement pas sous GM. Tu es obligé d'utiliser une condition banale.

_________________

Dur Dabla, pour qui voudrait écouter un brin de metal celtique.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 16:01

Un jour j'ai pété mon cable parce qu'une loop for ne fonctionnais pas.
En fait j'avais mis i++ x)

Et oui, yoyogames on beau nous sortir des version de GM a 200$, sont pas capable d'ajouter quelques opérateurs et enrichir le gml...

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

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Re: draw_losange   Dim 2 Oct 2011 - 16:13

Citation :
L'opérateur ternaire n'existe simplement pas sous GM
Ça explique que toutes les syntaxes que j'ai essayé ne fonctionnait pas ...

Citation :
Un jour j'ai pété mon cable parce qu'une loop for ne fonctionnais pas.
En fait j'avais mis i++ x)
J'ai fait exactement la même chose x)

Bon bha je pense que je ne peut pas réduire plus le code.
Je réédite mon post avec une version jolie et une version optimisé.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: draw_losange   

Revenir en haut Aller en bas
 
draw_losange
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

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