Ah, oui tu as raison, j'ai peut être été un peu bourrin, désolé ^^ :
- j'ai mis un exemple plus bas, ici le deuxième pointeur est controlé
par un Timer,
- le but est que le roll-over fonctionne au passage du gros curseur
droit au-dessus du Plane, pour l'instant seule la souris fonctionne,
- AS3/FP9/Flex SDK3 (= FlashDevelop)
Merci, merci
package
{
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.cameras.*;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.core.utils.Mouse3D;
import org.papervision3d.core.utils.virtualmouse.VirtualMouse;
import
org.papervision3d.core.utils.virtualmouse.VirtualMouseMouseEvent
import org.papervision3d.materials.utils.MaterialsList;
import flash.events.*;
import flash.display.*;
import flash.utils.Timer;
import flash.text.TextField;
public class Main extends Sprite
{
private const REFRESH_FREQ:int = 30;
private var _container:DisplayObjectContainer;
protected var _viewport:Viewport3D;
protected var _renderer:BasicRenderEngine;
protected var _scene:Scene3D;
protected var _camera:Camera3D;
protected var _refreshBeacon:Timer;
protected var _plane:Plane;
protected var _mouse:VirtualMouse;
protected var _gizmo:Cube;
protected var _offset:int = 3;
protected var _output:TextField;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// container général
_container = new Sprite();
stage.addChild(_container);
// initialisation PV3D
_viewport = new Viewport3D(800, 600, false, true,
false);
_viewport.buttonMode = true;
_container.addChild(_viewport);
_renderer = new BasicRenderEngine();
_scene = new Scene3D();
_camera = new Camera3D();
_camera.zoom = 1;
_camera.focus = 1000;
// récupére une VirtualMouse
_mouse = _viewport.interactiveSceneManager.virtualMouse;
// ajout objet interactif
_plane = new Plane(new ColorMaterial(), 200, 200);
_plane.material.interactive = true;
_plane.addEventListener(InteractiveScene3DEvent.OBJECT_OVER,
onPlaneOver);
_plane.addEventListener(InteractiveScene3DEvent.OBJECT_OUT,
onPlaneOut);
_scene.addChild(_plane);
// ajout curseur secondaire
_gizmo = new Cube( new MaterialsList({all:new
ColorMaterial(0x888888)}), 10, 10, 10 );
_gizmo.z -= 200;
_scene.addChild(_gizmo);
var bx:Cube = new Cube( new MaterialsList({all:new
ColorMaterial(0xFF0000)}), 10, 10, 10 );
var by:Cube = new Cube( new MaterialsList({all:new
ColorMaterial(0x00FF00)}), 10, 10, 10 );
var bz:Cube = new Cube( new MaterialsList({all:new
ColorMaterial(0x0000FF)}), 10, 10, 10 );
bx.x = 100;
by.y = 100;
bz.z = 100;
bx.scaleX = 15;
by.scaleY = 15;
bz.scaleZ = 15;
_gizmo.addChild(bx);
_gizmo.addChild(by);
_gizmo.addChild(bz);
// boucle principale
_refreshBeacon = new Timer(1000 / REFRESH_FREQ);
_refreshBeacon.addEventListener(TimerEvent.TIMER,
onRefresh);
_refreshBeacon.start();
_output = stage.addChild(new TextField()) as TextField;
_output.multiline = true;
_output.mouseEnabled = false;
_output.text = '---\n';
_output.height = 600;
_output.width = 800;
}
private function onVirtualMouseOver(e:MouseEvent):void
{
_output.appendText('Main::onVirtualMouseOver\n');
}
private function onVirtualMouseOut(e:MouseEvent):void
{
_output.appendText('Main::onVirtualMouseOut\n');
}
private function onPlaneOver(e:InteractiveScene3DEvent):void
{
_output.appendText('Main::onPlaneOver\n');
}
private function onPlaneOut(e:InteractiveScene3DEvent):void
{
_output.appendText('Main::onPlaneOut\n');
}
private function onRefresh(e:TimerEvent):void
{
// fais bouger le curseur virtuel
if (_gizmo.x + _offset > 300 || _gizmo.x + _offset <
-300)
_offset *= -1;
_gizmo.x += _offset;
_gizmo.y += _offset;
_mouse.x += _offset;
_mouse.y += _offset;
_renderer.renderScene(_scene, _camera, _viewport);
}
}
}
On 16 sep, 16:25, ekameleon <[EMAIL PROTECTED]> wrote:
> Ah .. autant pour moi .. tu parles de Papervision dans le titre de ton
> message .. mais manque tout de même les infos sur le reste (code, etc..)
> EKA+ :)
>
> Le 16 septembre 2008 16:24, ekameleon <[EMAIL PROTECTED]> a écrit :
>
> > Hello :)
> > Nouveau sur le FCNG ? :)
>
> > Faut qu'on devine beaucoup de chose dans ta question au dessus;)
>
> > J'imagine que tu parles de Papervision ? ?
>
> > Tu sais nous ne sommes pas tous des livres ouvert sur la connaissance
> > universelle de tout ce qui existe en ActionScript ;) Faut un peu nous aider
> > quand vous posez des questions ;)
>
> > Sinon comme toujours...
>
> > 1 - isole ton problème ... fait un code simple
>
> > 2 - donne nous du code ... on peut pas t'aider si tu montres pas ton code
> > :) Et surtout pas tout ton code mais seulement celui qui va nous permettre
> > de voir ce que tu fais :)
>
> > 3 - si tu utilises Papervision ou autre.. faut nous préciser plusieurs
> > choses.. tu bosses en AS2/AS3 , avec FP9/FP10, dans FDT, FlexBuilder ? Dans
> > un projet AS3/MXML ? etc....
>
> > Tu vois.. je dois te poser pleins de questions pour arriver à cerner ton
> > problème... et c'est pas top du coup pour que de ton côté tu puisses avoir
> > une réponse précise :)
>
> > eKA+ :)
>
> > Le 16 septembre 2008 16:20, fh <[EMAIL PROTECTED]> a écrit :
>
> >> Hello,
> >> j'ai une scène qui doit gérer de manière simultanée :
> >> - la souris de manière traditionnelle,
> >> - un second pointeur, dont les données viennent de qqch de similaire à
> >> WiiFlash.
>
> >> J'arrive sans problème à gérer les mouvements en x,y,z des deux
> >> souris, mais mes objets ne dispatchent pas d'événements
> >> InteractiveScene3DEvent.OBJECT_OVER et
> >> InteractiveScene3DEvent.OBJECT_OUT quand le second pointeur est au-
> >> dessus. Ca fonctionne uniquement avec le pointeur traditionnel.
>
> >> J'ai tout retourné, incapable d'y arriver. Une piste ?
>
>
--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe Groupe "FCNG" de
Google Groupes.
Pour transmettre des messages à ce groupe, envoyez un e-mail à
l'adresse [email protected]
Pour résilier votre abonnement à ce groupe, envoyez un e-mail à
l'adresse [EMAIL PROTECTED]
Pour afficher d'autres options, visitez ce groupe à l'adresse
http://groups.google.com/group/FCNG?hl=fr
-~----------~----~----~----~------~----~------~--~---