Aller au contenu

[RESOLU]clip et bouton flash CS4


Messages recommandés

hello;

voila :

j'ai un bouton composé de :

1 image clé de part au chargement de la page

2 un clip qui s'active au passage de la souris (une trentaine d'image) et des filtres qui s'applique dessus

et je cherche a faire en sorte que lors du clic, le clip continue de tourné, a partir de l'image ou il en etait au moment du click, pendant par exemple 1 seconde (donc dans mon cas une 60aine d'image clés) tou en lui appliquant de nouveau filtre.

qqun aurait une idée d pour réaliser sa ?

Lien vers le commentaire
Partager sur d’autres sites

J'ignore les rouages de Flash CS mais un clip c'est pas comme un bouton donc il réagit pas à un bouton de base il me semble ?

Donc si c'est le cas tu peux tout faire avec un peu de code :

- sur le MOUSE_OVER, démarrer le clip

- sur le MOUSE_UP, démarrer un timer d'une seconde et mettre un flag à true (appelons-le clicBouton)

- sur le MOUSE_OUT, si clicBouton est false, arrêter le clip

- a la fin du timer, arrêter le clip et remettre clicBouton à false

Lien vers le commentaire
Partager sur d’autres sites

J'ignore les rouages de Flash CS mais un clip c'est pas comme un bouton donc il réagit pas à un bouton de base il me semble ?

en ce qui concerne le mouse_over sa fait bel et bien avancer le clip, mais en ce qui concerne le "click" c'est pas le cas.

par contre l'idée d'un clip unique devrait permettre de gagner en temps de chargement.

je me trompe peut etre mais j'ai l'impression que les boutons bouffe a mort !

[edit]

je vien d'essayer sa mais sa a pas l'air de marché des masses :

rt_ct_1.addEventListener(MouseEvent.MOUSE_OVER,lire);
function lire(Event:MouseEvent):void
{
play();
}
rt_ct_1.addEventListener(MouseEvent.MOUSE_OUT,stp);
function stp(Event:MouseEvent):void
{
stop();
}

Lien vers le commentaire
Partager sur d’autres sites

La place prise par clips et boutons dépends juste du nombre et du contenu de leurs keyframes.

Attention je ne sais pas où tu as mis ce code, mais puisque tu es en AS3 (donc en programmation objet), tu vas demander à ce que l'objet en cours démarre ou s'arrête, c'est à dire la frame si tu as mis les méthodes dans un script de frame. Il faut plutôt que tu fasses monClip.play() par exemple pour appeler play sur le clip à jouer.

Lien vers le commentaire
Partager sur d’autres sites

bon,

pour le code sa commence a ressemblé a quelque chose !!!

par contre a la place d'un timer de X seconde ... j'aurais plutot besoins de 2 chose :

- un compteur de frame sur le clip enfant ( a voir si sa fonctionne sur les clip compilés...) : par exemple pour demarrer un autre clip sur la meme frame.

- une fonction qui em permette de lire un clip en entier a chaque fois qu'elle est appelée

;);)

[EDIT 2h après] : et tant qu'à faire aussi, une fonction qui permette,... humm comment dire, de ne démarrer un clip que si celui qui le precedait est arriver a la fin.

exemple :

- j'ai un clip qui démarre sur le mouse_over,

- si l'utilisateur fait "mouse_out" alors je veut que le clip associé au "mouse_out" démarre sur la meme frame que celle ou en etait arriver le clip "mouse over"

- par contre si l'utilisateur fait "mouse_click" alors je veut que mon clip "mouse_out" aille jusqu'au bout puis lance ensuite le clip "mouse_click"....

a voir si ce sera pas trop lourd tout ces clips a repetition

[EDIT]

ha ! et est ce qu'un code inclut dans un clip qui a été converti en clip compilé, et ensuite placer sur la scene principale est il accessible ?

Lien vers le commentaire
Partager sur d’autres sites

bon,

pour le code sa commence a ressemblé a quelque chose !!!

par contre a la place d'un timer de X seconde ... j'aurais plutot besoins de 2 chose :

- un compteur de frame sur le clip enfant ( a voir si sa fonctionne sur les clip compilés...) : par exemple pour demarrer un autre clip sur la meme frame.

- une fonction qui me permette de lire un clip en entier a chaque fois qu'elle est appelée

:ouioui::win:

bon en ce qui concerne ces 2 point je pense avoir trouver de quoi faire mon bonheur !!!

pour obliger mon clip a aller jusqu'au bout je pense a un truc du genre

while (monClip.currentFrame != monClip.totalFrames)
{
  monClip.play()
}

et avec un if pour l'obliger a changer de clip lorsqu'il est arriver sur "monClip.totalFrames"

et enfin j'ai toujours la methode "stage.frameRate" que je peut faire varier, si j'ai bien compris, pendant la lecture d'un clip, et coder ma propre fonction avec "prevFrame" pour rembobiner.

bon j'ai pas encore tester tout sa mais je vais y venir.

alors par contre quelqu'un sait si dans la doc AS3 il y a une logique de découpage des différents package et des différentes classe de base. par ce que quand on cherche, c'est quand meme mieu si ont sai de quel coté cherché ;)

[EDIT] ouais nan !!

faut reconnaitre que dans ce cas la une boucle "while" sa fait vraiment trop moche ! un if devrait peut etre le remplcer ou autre chose.

suggestions bienvenue

Lien vers le commentaire
Partager sur d’autres sites

SURTOUT PAS de boucle de ce genre :mdr:

Parce que tant que tu ne sortira pas de la boucle l'affichage ne se mettra pas à jour. Flash ne sait pas faire deux choses en même temps.

Plusieurs outils te permettent de manipuler un clip dans la classe MovieClip :

- currentFrame renvoie le numéro de la frame en cours (utile si tu veux positionner un autre clip à la même frame)

- play() qui lit un clip jusqu'au bout

- gotoAndPlay(frame) qui déplace le clip à la frame spécifiée et démarre la lecture.

Lorsque tu appelle les méthodes play ou gotoAndPlay, la doc précise (car tu as lu la doc n'est-ce pas ? :iloveyou:) que le clip va continuer à lire jusqu'à la fin. Pas besoin de boucle donc.

Lien vers le commentaire
Partager sur d’autres sites

SURTOUT PAS de boucle de ce genre :non:

Parce que tant que tu ne sortira pas de la boucle l'affichage ne se mettra pas à jour. Flash ne sait pas faire deux choses en même temps.

faux ! flash peut tout faire, meme lire des variables qui n'existe pas hihihi :craint:

flash+POO=DIEU();

bref !

en fait ce que je cherche a faire c'est a recoder une fonction "play()" a ma sauce. a savoir qu'elle devrait pouvoir :

- demarrer la lecture :

- sur une frame spécifique si indiqué

var compteur_frame:int = monClip.currentFrame // (ou peut etre "this" a la place de monClip)

- sinon au debut du clip (frame 1)

//peut etre en utilisant un flag  qui ce mettrai automatiquement sur true si je doit debuter sur la frame 1 ??

- modifier la vitesse de lecture (par exemple selon un coef par rapport a la vitesse de lecture courante)

stage.frameRate // mais seulement pour le clip en quextion
// donc j'imagine que se serait plutot (si sa existe ???) monClip.frameRate
[EDIT] mais sa a pas l'air d'existé ce truc ???

- inclure la possibilité de lire vers l'avant ou vers l'arrière

//utiliser peut etre un flage pour l'orientation de la tete de lecture
+ un addEventListener(Event:ENTER_FRAME, qqch);
// avec la fonction qqch qui fait dans le genre monClip.prevFrame

- un compteur qui me permette d'enregistrer l'etat du clip et le nombre de tours complets effectués (monClip.totalFrame ??) afin de controler le nombre de tours

et tant qu'a faire trouver le moyen de faire de cette fonction une methode de monClip de facon a ne pas avoir a la réecrire a chaque fois que mon nom d'occurence change.

=> création d'une sous classe herité de la class "MovieClip" (je pense peut etre a inclure les compteur de frame et de "tour de clip" a l'interieur en tant que propriété ) a voir si c'est une bonne solution ??

disons que c'est l'idée, en gros (a oui faut aussi qu'elle puisse stoper le clip, mais sa sa devrait aller).

ensuite il faut que je trouve le moyen de coder tousa en partant du principe que cette fonction ne peut recevoir qu'un seul argument

function maFonction(Event:MouseEvent):int;

puisque "addEventListener(MouseEvent:XXX, maFonction);" ne transmet qu'un seul paramettre a maFonction.

si j'ai bien tout pigé

bon et pour la suite, mais sa on vera après, j'aurais peut etre besoins egalement de pouvoir affecter des filtre (sa je sais faire), de modifier la position du clip sur la scene, et de pouvoir charger/décharger sur la scene un ou 2 clip différent toujours en fonction des action de ma souris.

Lorsque tu appelle les méthodes play ou gotoAndPlay, la doc précise (car tu as lu la doc n'est-ce pas ? :mdr:) que le clip va continuer à lire jusqu'à la fin. Pas besoin de boucle donc.

certe le clip est lue jusqu'a la fin, mais ensuite, il recomence au debut (en boucle) et j'ai aussi besoins de pouvoir controler le nombre de tour de boucle, meme si une solution "while" etait effectivement et catégoriquement trop moche (hideuse meme, comment ais-je pu y penser, je merrite d'etre condamné à codé en Basic toute ma vie rien que pour ça ! :mdr:)

oui la doc je la lit (j'ai commencer avant hier :yes: )

par sa : http://help.adobe.com/fr_FR/ActionScript/3.0_ProgrammingAS3/, j'en suis a POO

et par la classe http://www.adobe.com/livedocs/flash/9.0/Ac...play/Stage.html (mais en version FR)

et puis par sa : http://help.adobe.com/fr_FR/ActionScript/3...90204-7d9d.html

Lien vers le commentaire
Partager sur d’autres sites

- Si tu ne veux pas que le clip soit lu jusqu'à la fin, il faut appeler stop() dans la dernière frame du clip

- Il est impossible de modifier la vitesse de lecture (framerate) d'un clip, puisque le framerate est attribué à l'animation entière et non modifiable une fois démarrée. Le framerate des clips est égal au framerate de l'animation.

- Dans les évènements, il n'y a qu'un paramètre que tu ne contrôle pas. Donc tu ne peux pas passer de données perso directement en paramètre d'un évènement. A toi de t'arranger pour que les données dont tu as besoin dans l'évènement soient accessibles. N'oublies pas que tu peux toujours accèder aux données de ton instance via this.

- Pour lire vers l'arrière, utilise simplement clip.gotoAndStop(clip.currentFrame - 1) dans l'évènement enterFrame

Je continuerai bien mais j'ai du boulot, moi :craint:

Lien vers le commentaire
Partager sur d’autres sites

- Il est impossible de modifier la vitesse de lecture (framerate) d'un clip, puisque le framerate est attribué à l'animation entière et non modifiable une fois démarrée. Le framerate des clips est égal au framerate de l'animation.

ha ! ça c'est très chiant !

du coup je voit pas comment appliqué des accelerations a mon clip (bah oui en fait j'ai été obligé de faire un truc très moche : j'ai creer des clip en 3D sous swift (rotation d'un cube sur lui meme, etc...) et la seule façon que j'ai trouver pour les integrer a ma scene Flash tout en disposant de la transparence du background c'est de les exporter image par image au format PNG puis de reconstitué le clip dans flash)

donc partant de la la seul option que j'ai c'est de multiplier les clip : une rotation rapide, une lente, etc... et donc les images et l'espace memoire qu'elles occupent !!

après j'ai bien essayer de jeter un oeil du coté de Sandy3D mais mon AS est vraiment So.Bad pour le moment!

Je continuerai bien mais j'ai du boulot, moi :craint:

Faignan

:mdr:

Lien vers le commentaire
Partager sur d’autres sites

un bel ecran tout noir ! :craint:

Faut attendre un peu qu'il charge toutes les textures et tout. Patience ! Mais en tout cas c'est clairement la librairie la plus aboutie en matière de 3D dans Flash.

je vien d'ouvrir la page de la doc : si seulement il y avait un petit tuto qui expliquait comment lire la doc et tout (par exemple quels package contienne quoi, et quelle classe servent a quoi, etc..., en gros comment le decoupage a été fait, histoire de s'y retrouver un peut )

[EDIT]

après un petit coup d'oeil, paper a l'air d'avoir des rendu un peut meilleur que sandy, je vais essayer sa:

et concernant les tuto google a été mon ami : http://papervision3d-fr.com/liste-des-tutoriels/

[EDIT] quelqu'un connais sa TortoiseSVN ??

dans ce tuto sur comment installer papervision il invite a installer ce fameux tortoise et a faire je sais pas quoi d'autre ensuite plutot que de passer par les source d'origine de paper3D ??? :mdr:

ouai en fait tortoise c'est juste pour chargé des sources cherchez pas !

Lien vers le commentaire
Partager sur d’autres sites

et concernant les tuto google a été mon ami : http://papervision3d-fr.com/liste-des-tutoriels/

bon en fait j'ai suivi les tutos jusqu'a la partie 4 -Une scene Papervision avec une Plane en 20 lignes. ce qui fait que j'obtient un fichier papervision.fla, doté d'une liaison nomée "Main" avec le fichier "main.as"

j'ai mes lib papervision linké dans mes preferences AS3

et enfin j'ai ce code (je vous previent c'est long)

package
{
//Importation des librairies nécessaires à l’application
import flash.display.Sprite;
import org.papervision3d.cameras.FreeCamera3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
public class Main extends Sprite
{
	//Définition des variables nécessaires.
	private var viewport:Viewport3D;
	private var scene:Scene3D;
	private var camera:FreeCamera3D;
	private var renderer:BasicRenderEngine;

	public function Main()
	{
		//Fonctions nécessaire à l’initialisation du projet
		init();
	}
	private function init():void
	{
		//Les fonctions nécessaires à l’initialisation de Papervision
		initPapervision();
	}
	private function initPapervision():void
	{
		//Création du viewport
		viewport = new Viewport3D();
		//Ajout du viewport à la scène si vous l’oubliez l’application marchera mais n’apparaitra pas
		addChild( viewport );
		//Création de la scene
		scene = new Scene3D();
		//Création de la caméra
		camera = new FreeCamera3D();

		//Création du moteur de rendu
		renderer = new BasicRenderEngine();
		renderer.renderScene( scene, camera, viewport );
	}
}
}
package 
{
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.view.BasicView;

public class BasicScene extends BasicView
{
	public function BasicScene()
	{
		buildPlane();
	}
	private function buildPlane() : void
	{
		var colorMaterial : ColorMaterial = new ColorMaterial(0xff00ff);
		var plane : Plane = new Plane(colorMaterial, 220, 120, 4, 4);
		scene.addChild(plane);
		startRendering();
	}
}
}

qui est dans fait un copié/collé des partie 3 et 4 du tuto:

le probleme c'est un export au format SWF (un ctrl+entr) ne me donne rien, pas d'erreur de compil mais j'ai juste une page blanche.

si quelqu'un comprend ???

Lien vers le commentaire
Partager sur d’autres sites

Je pense que c'est parce que ta scène est vide. Tu définis bien du contenu dans ta classe BasicScene mais tu ne l'utilise nulle part !

Il faut que tu l'utilises dans ta méthode init, en faisant un truc de ce genre :

// Variables
private var maScene: BasicScene;

private function init():void
{
 maScene = new BasicScene();
 addChild(maScene);
}

C'est peut-être pas exactement ça puisque j'ai lu le tuto très en diagonale mais ça devrait y ressembler ^^

Lien vers le commentaire
Partager sur d’autres sites

sa me tape sur les nerfs :

j'ai suivi cet excellent tuto : http://www.grafikart.fr/tutoriels/flash-panorama-360-64

ou il explique comment creer une sphere 3D avec paper... sa roule nickel, jusqu'au moment ou je decide de remplacer la sphere par un cube

et la tout foire !

en fait sa foire sur la ligne ou je fait :

var cube=new Cube(new WireframeMaterial());

qui me donne l'erreur

1067: Contrainte implicite d'une valeur du type org.papervision3d.materials:WireframeMaterial vers un type sans rapport org.papervision3d.materials.utils:MaterialsList.

je lis la doc et apparament faut aller chercher la classe MaterialsList dans le package decrit ci dessus, sauf que je trouve que le package :

org.papervision3d.materials et jamais le .utils

et en plus lors de l'import il me sort sa :

1172: La définition org.papervision3d.materials:MaterialsList est introuvable. :transpi:

allez comprendre quelque chose (et puis faut etre honnete la doc est pas franchement facile a lire)

donc si quelqu'un c'est comment faire pour ajouter une texture a un cube avec paper ???

Lien vers le commentaire
Partager sur d’autres sites

putain j'ai fait apparaitre un cube c'est un miracle

en fait pource que sa interesse afin d'appliqué une texture au cube et le voir apparaitre j'ai fait comme sa :

var mat=new MaterialsList();
mat.addMaterial(new ColorMaterial(0xFf99dd), "all");

var cube=new Cube(mat,600,600,700,8,8,8,0,0);
cube.x=cube.y=cube.z=0;

scene.addChild(cube);

et il faut importer ca :

import org.papervision3d.materials.*;
import org.papervision3d.materials.utils.*;

et il faut le deviner par ce que "utils" n'est pas present dans la doc ou en tout cas je l'ai pas vu, materails list est représenté comme faisant partie de materials

MaterialsList()

[EDIT] est il possible de se passer de camera lors de l'affichage (render():cdmalades: d'un objet sur la scene avec papervision (par ce que j'avoue que sa me pose plus de probleme qu'autre chose...???

[EDIT 2] regler avec cam.ortho=true;

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

j'ai laisser tomber papervision.

les code que je faisait mettais trop de temps au chargement

par contre j'ai ce code la :

this.addEventListener(MouseEvent.CLICK,cube_click);


function cube_click(event:MouseEvent):void 
{
trace(event.type);
flag_stp=true;
event.target.addEventListener(Event.ENTER_FRAME,oneShot_play);
event.target.alpha=1;
}
function oneShot_play(event:Event):void
{
if(event.target.currentFrame==event.target.totalFrames)
{
	flag_stp=false;
	event.target.gotoAndStop(1);
}
else if(flag_stp==true)
{
	event.target.play();
}
trace(event.target.currentFrame);
}

qui roule presque bien :

lorsque je clique sur mon premier cube, ce dernier effectue une seul rotation, et recommence a chaque fois que je clique

par contre lorsque je clique sur le deuxieme

les 2 cube effectue la rotation.

je me demande d'ou sa peut venir ???

le SWF est visible ici : http://sites.google.com/site/marketingieve...?attredirects=0

autre question qui peut paraitre bizarre mais existe il le moyen d'ecouté des non-evenement (autrement dit : lorsqu'aucune action n'est faite par l'utilisateur, faire ceci...)

[EDIT] d'après ce que je comprend, le fait d'ajouté mon event listener dans ma fonction click sur l'objet pointé par this, fait qu'il n'est pas enlevé ensuite et est donc réactivé.

mais je crois qu'en plus y'a une histoire de propagation.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...