AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
Cartes Pokémon 151 : où trouver le ...
Voir le deal

 

 draw_losange

Aller en bas 
5 participants
AuteurMessage
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
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.

draw_losange Empty
MessageSujet: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 2: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 - 18:16, édité 2 fois
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 3: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 ****
Caly


Messages : 1285
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.

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 9: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
Morwenn


Messages : 151
Projet Actuel : Icare

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 12: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

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


Messages : 1611
Localisation : Montpellier

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 12: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*
Mass


Messages : 3351
Localisation : Dans une canonnière wookie.
Projet Actuel : Monter des trucs et des machins

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 13: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
onilink_


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

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 13: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

_________________
draw_losange Runningpotato1draw_losange TvF6GED draw_losange MdetltS
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 14: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
Morwenn


Messages : 151
Projet Actuel : Icare

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 15: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)

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


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

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 16: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.

_________________
draw_losange Runningpotato1draw_losange TvF6GED draw_losange MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
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.

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 16: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
onilink_


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

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 16: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

_________________
draw_losange Runningpotato1draw_losange TvF6GED draw_losange MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
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.

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 17: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
Morwenn


Messages : 151
Projet Actuel : Icare

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 17:50

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

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


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

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 18: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...

_________________
draw_losange Runningpotato1draw_losange TvF6GED draw_losange MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
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.

draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange EmptyDim 2 Oct 2011 - 18: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é





draw_losange Empty
MessageSujet: Re: draw_losange   draw_losange Empty

Revenir en haut Aller en bas
 
draw_losange
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: