Ajouter du reflet sur un objet plane style carrousel

cs_Alex001 Messages postés 32 Date d'inscription mercredi 25 juillet 2001 Statut Membre Dernière intervention 20 janvier 2009 - 20 janv. 2009 à 23:43
sep2vigne Messages postés 50 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 29 janvier 2010 - 21 janv. 2009 à 00:11
Bonjour à tous,

Je code actuellement un site en flash AS3.
Avec l'aide de plusieurs sources j'ai fini par créer des planes qui charges des images a partir d'un xml, puis les planes sont créer dans un conteneur avec un chemin cylindrique pour le mouvement.

J'essaye d'ajouter un plane inversé avec un degradé pour créer l'effet du reflet au sol.
Mais je n'y arrive pas, a chaque teste l' AS3 ne reagit plus.

Voici mon code de chargement des images et création des objets planes, qui fonctionne très bien.

Je n'ai pas ajouter le code du reflet car j'espère que quelqu'un pourra m'indiqué une nouvelle issue.

import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import flash.display.Sprite;
import flash.events.MouseEvent;

var container:Sprite = new Sprite();
container.x = 488;
container.y = 275;
addChild(container);

var scene:Scene3D = new MovieScene3D(container);
var cam:Camera3D = new Camera3D();
cam.zoom = 8;

tn_title.text = "";
tn_desc.text = "";
tn_url.text = "";

var p_dict:Dictionary=new Dictionary();
var pc:Plane = new Plane();
pc.visible = false;
cam.target = pc;

var numOfRotations:Number = 3;
var yPos:Number = 0;
var angle:Number = 0;

var filename_list = new Array();
var url_list = new Array();
var url_target_list:Array = new Array();
var title_list = new Array();
var description_list = new Array();
var folder:String = "thumbnails/";

var i:Number;
var j:Number = 0;
var k:Number = 0;
var l:Number = 0;
var m:Number = 0;
var total:Number;
var flashmo_xml:XML = new XML();
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("thumbnail_list_3.xml"));
loader.addEventListener(Event.COMPLETE, create_thumbnail);

function create_thumbnail(e:Event):void
{
flashmo_xml = XML(e.target.data);
total = flashmo_xml.thumbnail.length();
var anglePer:Number = ((Math.PI*2) * numOfRotations) / total;

for( i = 0; i < total; i++ )
{
url_list.push( flashmo_xml.thumbnail[i].@url.toString() );
url_target_list.push( flashmo_xml.thumbnail[i].@target.toString() );
title_list.push( flashmo_xml.thumbnail[i].@title.toString() );
description_list.push( flashmo_xml.thumbnail[i].@description.toString() );

var bfm:BitmapFileMaterial = new BitmapFileMaterial(
folder + flashmo_xml.thumbnail[i].@filename.toString());
bfm.oneSide = false;
bfm.smooth = true;
var p:Plane = new Plane(bfm, 140, 105, 2, 2);
scene.addChild(p);
var p_container:Sprite = p.container;
p_container.name = "flashmo_" + i;
p_dict[p_container] = p;
p_container.buttonMode = true;
p_container.addEventListener( MouseEvent.ROLL_OVER, p_rollover );
p_container.addEventListener( MouseEvent.ROLL_OUT, p_rollout );
p_container.addEventListener( MouseEvent.CLICK, p_click );


p.rotationY = (-i*anglePer) * (180/Math.PI) + 90;
p.x = Math.cos(i * anglePer) * 480;
p.z = Math.sin(i * anglePer) * 480;
p.y = yPos;

if( (i+1) % 20 == 0 )
{
yPos += 115;
}
}
}

function p_rollover(me:MouseEvent)
{
var sp:Sprite = me.target as Sprite;
var tw:Tween = new Tween(sp, 'alpha', Strong.easeOut, 1, 0.5, 0.6, true);
var s_no:Number = parseInt(sp.name.slice(8,10));
tn_title.text = title_list[s_no];
tn_desc.text = description_list[s_no];
tn_url.text = url_list[s_no];
}
function p_rollout(me:MouseEvent)
{
var sp:Sprite = me.target as Sprite;
var tw:Tween = new Tween(sp, 'alpha', Strong.easeOut, 0.5, 1, 0.6, true);
tn_title.text = "";
tn_desc.text = "";
tn_url.text = "";
}
function p_click(me:MouseEvent)
{
var sp:Sprite = me.target as Sprite;
var s_no:Number = parseInt(sp.name.slice(8,10));
navigateToURL(new URLRequest(url_list[s_no]), url_target_list[s_no]);
}

addEventListener(Event.ENTER_FRAME, render);

function render(e:Event):void
{
var dist2:Number = ((stage.mouseX) - 488) * 0.0001;
angle += dist2;
cam.x = - Math.cos(angle) * 350;
cam.z = Math.sin(angle) * 350;
var new_zoom = 12.5 - stage.mouseY * 0.008;
cam.zoom += ( new_zoom - cam.zoom ) * 0.06;
scene.renderCamera(cam);
}

2 réponses

cs_Alex001 Messages postés 32 Date d'inscription mercredi 25 juillet 2001 Statut Membre Dernière intervention 20 janvier 2009
20 janv. 2009 à 23:54
Voici le code que j'ai testé pour créer le reflet. malheureusement le code as3 ne s'execute plus !


p_container.duplicateMovieClip("image2", _root.getNextHighestDepth());
image2._yscale *= -1; //On retourne le nouveau clip
inter = setInterval(down, 100); //On créé un interval qui s'exécutera dans 100 millisecondes
function down(){ //Au bout de 100 millisecondes la fonction down est éxécutée
image2._y = image._height * 2; //L'image étant chargée on peut descendre image2
degrade._y = image._height; //On descend le dégradé
degrade._height = image._height; //On adapte la hauteur du dégradé à la hauteur du 1er clip
degrade._width = image._width; //On adapte la largeur du dégradé à la largeur du 1er clip
clearInterval(inter); //On détruit l'interval sinon le clip descendra toutes les 100 millisecondes
}
degrade.swapDepths(image2); //On pass le dégradé au 1er plan (on inverse avec le clic duppliqué)


Merci d'avance. Alexandre
0
sep2vigne Messages postés 50 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 29 janvier 2010
21 janv. 2009 à 00:11
Salut, j'ai pas regardé en détail ton code mais il me semble que tu utilises _height et _width
> en AS3 les "_" n'existent plus.
_alpha = alpha
_height = height
_width = width
0