IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Discussion :

le main menu dans Crysis 3 [CS5]


Sujet :

Flash

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut le main menu dans Crysis 3
    Bonjour, je cherche à recréer dans flash cs6, le principe du menu principal de Crysis3. Ce sont divers couches qui pivotent autour d'un axe central, selon que la souris se balade en haut, en bas, à droite, à gauche. Voilà ce que ça donne :



    (je ne parle pas des choses internes au menu, mais du mouvement global de la "plaque" sur laquelle toutes les options semblent être situées et qui pivote légèrement au gré de la souris)

    Après quelques recherches et l'installation de Flash CS6 (j'avais flash8 avant), j'ai pu trouver ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    this.addEventListener(Event.ENTER_FRAME, moveWithMouse);
     
    function moveWithMouse(e:Event):void
    {
    	//Limits to stop the rotation if you around the middle. X
    	if (mouseX >((stage.stageWidth/2)+200-(stage.stageWidth/2-960/2)) || mouseX <((stage.stageWidth/2)-200-(stage.stageWidth/2-960/2))){
    			combo_mc.rotationY+= (mouseX - stage.stageWidth/2)*0.0005
    	}else{
    		//trace("noooo");
    	}
     
    }
    ça permet à un rectangle de pivoter sur son axe, selon que la souris soit à gauche ou à droite.

    Seulement je n'arrive pas à "limiter" le phénomène. En fait la rotation se fait "de pixels en pixels" tant que la souris est en place. Ce que je voudrais ce serait plutôt hm... de dire

    "bon, la souris est à gauche alors tu pivotes de +50 pixels".

    Ce serait comme une interpolation en fait, mais en script.


    J'avais un script qui permettait de déplacer un clip d'un point A vers un point B, de façon fluide, mais je n'arrive pas trop à l'adapter, il me met des erreurs et finalement, le rectangle ne bouge plus.

    Par contre c'était en AS2. Je mettais ça sur un clip :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    onClipEvent (enterFrame) {
    gliss1B = this._x;
    gliss2B = _root.glisstruc-gliss1B;
    gliss4B = gliss2B/7;
    this._x = this._x+gliss4B;
    }
    en appuyant sur un bouton qui avait cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _root.glisstruc = -455.8;
    le clip glissait tranquillement.

    Qq'un saurait-il si on peut adapter ça au cas présent?...

    Je suis une bille en script, mais hm... j'imagine que oui. En attendant quelques conseils avisés , je continue mes recherches...

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut j'ai trouvé... je crois
    J'ai trouvé sur le net un bout de script qui a l'air de donner le résultat que je voulais avoir. Je mets donc un movieclip sur la scène, et sur la première frame du fla j'écris ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    stage.addEventListener(MouseEvent.MOUSE_MOVE,mousemove);
    function mousemove(e:MouseEvent):void{
    	var xpercent:Number = mouseX/(stage.stageWidth/2);
    	var ypercent:Number = mouseY/(stage.stageHeight/2);
     
    	combo_mc.rotationY = (xpercent*10)-10;
    		if(mouseX>combo_mc.x){
    		combo_mc.scaleX = 1;
    		} else {
    		combo_mc.scaleX = -1;
    		}
     
    	combo_mc.rotationX = (ypercent*10)-10;
    		if(mouseY>combo_mc.y){
    		combo_mc.scaleY = 1;
    		} else {
    		combo_mc.scaleY = -1;
    		}
    }
    Et hop, quand je bouge la souris, ça fait "comme dans Crysis 3" (à peu de chose près)

  3. #3
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Hello,personnellement, j'évite de regarder les lignes de codes toutes faites pour les réadapter tant bien que mal. On a chacun sa façon de raisonner et ce qui peut convenir à l'un, ne convient pas à un autre.
    Ton problème est simple... c'est une simple rotation en x et y suivant la position de la souris en jouant un peu sur la focale pour donner un effet de proximité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    package
    {
    	import flash.display.Shape;
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.events.MouseEvent;
    	import flash.geom.PerspectiveProjection;
    	import flash.geom.Point;
    	import flash.text.TextField;
    	import flash.text.TextFormat;
     
     
    	public class Main extends Sprite
    	{
    		private const thetamax:uint = 20;
    		private var w:Number;
    		private var h:Number;
    		private var dimx:Number;
    		private var dimy:Number;
    		private var centre:Point;
    		private var thetay:Number;
    		private var thetax:Number;
    		private var Affichage:TextField = new TextField();
    		private var Font:TextFormat = new TextFormat();
    		private var plaque:Sprite = new Sprite();
     
    		private var projection:PerspectiveProjection = transform.perspectiveProjection;
    		private var ptdefuite:Point = projection.projectionCenter;
    		private var repere:Shape = new Shape();
     
    		public function Main():void
    		{
    			w = stage.stageWidth;
    			h = stage.stageHeight;
    			centre = new Point(w / 2, h / 2);
    			dimx = 3 * w / 4; //dimensions de la plaque
    			dimy = 3 * h / 4;
    			projection.focalLength = 660; //modification de la focale (plus courte pour une distorsion de la plaque et donner une idée de proximité)
     
    			with (repere.graphics) //reère (0x,oy)
    			{
    				lineStyle(1, 0xFF0000);
    				moveTo(ptdefuite.x, 0);
    				lineTo(ptdefuite.x, h);
    				moveTo(0, ptdefuite.y);
    				lineTo(w, ptdefuite.y);
    			}
     
    			//pour l'affichege des valeurs des angles
    			with (Font)
    			{
    				font = "arial";
    				size = 22;
    				color = 0;
    				align = "left";
    			}
     
    			with (Affichage)
    			{
    				defaultTextFormat = Font;
    				x = -dimx / 5;
    				y = -50;
    				autoSize = "left";
    				selectable = false;
    			}
    			//
     
    			with (plaque.graphics)
    			{
    				beginFill(0xf0f0f0);
    				lineStyle(2, 0);
    				drawRect(-dimx / 2, -dimy / 2, dimx, dimy); //on décale la forme vectorielle interne pour le centre de rotation
    			}
    			plaque.x = centre.x;
    			plaque.y = centre.y;
    			addChild(plaque);
     
    			plaque.addChild(Affichage);
    			addChild(repere);
     
    			stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
     
    		}
     
    		private function onMouseMove(e:MouseEvent):void
    		{
    			thetay = 2 * (mouseX - centre.x) * thetamax / w; //angle de rotaion en y de -20° à +20° 
    			thetax = -2 * (mouseY - centre.y) * thetamax / h; //angle de rotation en x de -20° à +20° 
    			plaque.rotationY = thetay;
    			plaque.rotationX = thetax;
    			thetax = arrondi(thetax);
    			thetay = arrondi(thetay);
    			Affichage.text = "angleY=  " + thetay.toString() + " °" + "  angleX=" + thetax.toString() + " °"; //valeurs des angles
    		}
     
    		private function arrondi(val:Number):Number
    		{
    			return Math.round(10 * val) / 10;
    		}
     
    	}
     
    }
    ci-joint le résultat :plaquepivotante.swf

    j'espère avoir bien compris ce que tu voulais...

    a+

    anthony

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut Cool
    En fait je suis graphiste avant tout et le script j'ai du mal (le code en général). Mon "as2" était vacillant, et avec l'as3 mes faibles bases se cassent un peu la tronche
    Sinon oui tu as bien compris. En fait je voudrai faire une sorte de faux os, donc ça veut dire :
    - l'écran qui pivote un peu pour plus de fun
    - un peu de drag et de drop
    - curseur perso
    - des clics possibles bien sûr...

    Merci pour ton aide, je zieuterai ça quand je serai devant flash (je l'ai pas sur cet ordi-là)

    A pluch'

  5. #5
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    En fait je suis graphiste avant tout et le script j'ai du mal (le code en général).
    Rassure-toi, ce n'était qu'un conseil et surtout pas un reproche...
    Si tu veux un effet moins prononcé, tu diminues thetamax et tu rallonges la focale...

    a+ et bonne bascule

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut Euh... y'a un petit bug
    t'inkiet, y'a pas de soucis, merci des infos pour les modifs "anti-mal de mer"

    Dsl mais hm, ça ne marche pas, j'ai du oublier un truc. Il me met un message d'erreur comme quoi les "packages ne peuvent être imbriqués". Il me signale ça en ligne deux, soit l'accolade qui est juste sous le mot "package"

    Et j'ai fait le test de mettre une petite fenêtre à l'intérieur du clip destinée à être bougée, et ça ne fonctionne pas non plus, alors que dans un nouveau projet où elle est toute seule, ça bouge... . J'ai pourtant mis le bon chemin, genre le nom du clip, le nom de la fenêtre, le clip "barre"...

    sans abuser je me permets de joindre mon fla hm... en as2 "avant", je mettais mes script sur les objets eux-mêmes. étant donné qu'il n'y en avait pas beaucoup je m'y retrouvais et ça fonctionnait. Mais c'est là chelou, les script fonctionnent quand ils sont seuls, mais pas ensemble...

    J'aimerai comprendre pourquoi pou éviter que ça se reproduise ...
    Fichiers attachés Fichiers attachés

  7. #7
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Désolé, je n'ai pas Flash CS.
    Je code de AS3 avec FlashDevelop.

    A toi d'adapter le script à l'interface Flash CS5.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Joomla!] [Joomla 1.5.14] Aucun menu n'apparait dans le main menu
    Par ditch59 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 19/04/2010, 16h24
  2. [VB.NET] Icônes dans un Main Menu
    Par botanique dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/01/2006, 16h28
  3. Ajout Menu dans un PopupMenu
    Par Larion dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/08/2004, 12h45
  4. Réponses: 5
    Dernier message: 25/04/2004, 00h57
  5. Inserer Un Menu dans un autre en execution
    Par apt dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 11h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo