Salve a tutti. E' la prima volta che scrivo sul forum e mi scuso perchè probabilmente le domande che sto per porvi sono argomenti già trattati, ma non ho trovato sufficienti aiuti al mio problema. Ho realizzato un codice in ActionScript 3, utilizzando in aggiunta le librerie PaperVision3d e Caurina. Il codice genera una galleria di immagini (6 alla volta, frammenti di un'unica immagine più grande). Attualmente ho due problemi:
1) al click del mouse in un pulsante (esterno al AS che postato) viene richiamata la funzione "remove", ma i piani non vengono rimossi dalla scena e si sovrappongono.
2) vorrei poter ridimensionare lo sfondo del file .fla a seconda della risoluzione dello schermo e di conseguenza suppongo che dovrò aumentare lo zoom sulle immaggini.
Qualcuno sa aiutarmi? Grazie in anticipo per qualsiasi suggerimento!
Codice:
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.net.URLVariables;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.Papervision3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.materials.*;
import org.papervision3d.core.proto.MaterialObject3D;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.*;
import caurina.transitions.Tweener;
import org.papervision3d.core.math.Number3D;
public class a extends Sprite
{
var view:Viewport3D;
var cam:Camera3D;
var render:BasicRenderEngine;
var scene:Scene3D;
var dispisplayObject3D;
var planesHolderisplayObject3D;
var _planesAreMoving:Boolean = false;
var primo:Boolean = false;
var k:uint = 0;
public function a()
{
stage.align = StageAlign.TOP;
stage.scaleMode = StageScaleMode.NO_SCALE;
view = new Viewport3D(1000,557,true,true);
addChild(view);
cam = new Camera3D ;
cam.focus = 100;
cam.zoom = 5;
scene = new Scene3D ;
render = new BasicRenderEngine();
addGalleryImages(k);
addEventListener(Event.ENTER_FRAME, rend);
}
public function addGalleryImages(k:int):void
{
// Create holder for the gallery objects
planesHolder = new DisplayObject3D();
scene.addChild( planesHolder );
// Add gallery planes
for (var i:uint=0; i<3; i++)
{
for (var j:uint=0; j<2; j++)
{
var material : BitmapFileMaterial = new BitmapFileMaterial("img/image"+(k+1)+".png");
material.interactive = true;
material.doubleSided = true;
var galleryPlane:Plane = new Plane(material,235,185);
if (primo)
{
primo = false;
galleryPlane.z = -150;
galleryPlane.x = -350 - 235 * i;
galleryPlane.y = +155 - 182 * j - i * 70;
galleryPlane.rotationY = 180;
}
else
{
galleryPlane.z = Math.pow(-1,k + 2) * 700;
galleryPlane.x = Math.pow(-1,k + 2) * 700;
galleryPlane.y = Math.pow(-1,k + 2) * 700;
Tweener.addTween( galleryPlane, {
z: -150,
x: -350-235*i,
y: +170-182*j-i*70,
rotationY : 180,
time:2,
delay:0,
transition:"easeInSin"
} );
}
// Listen for the gallery object
galleryPlane.addEventListener(
InteractiveScene3DEvent.OBJECT_OVER, onPlaneOver );
galleryPlane.addEventListener(
InteractiveScene3DEvent.OBJECT_OUT, onPlaneOut );
galleryPlane.addEventListener(
InteractiveScene3DEvent.OBJECT_CLICK, onPlanePress );
planesHolder.addChild( galleryPlane , String(k) );
k += 1;
}
}
}
public function remove():void
{
scene.removeChild( planesHolder );
for(var i:int=k;i<k+6;i++)
{
planesHolder.removeChildByName(String(i));
}
if (k == 0)
{
k = 6;
addGalleryImages(k);
}
if (k == 6)
{
k = 12;
addGalleryImages(k);
}
if (k == 12)
{
k = 0;
addGalleryImages(k);
}
}
function onPlaneOver( event:InteractiveScene3DEvent ):void
{
if (! _planesAreMoving)
{
// Tween plane
var plane:Plane = event.target as Plane;
Tweener.addTween( plane, {
z: -300,
time:2,
transition:"easeInSin"
} );
}
}
/**
* Gallery plane mouse out event handler
*/
function onPlaneOut( event:InteractiveScene3DEvent ):void
{
if (! _planesAreMoving)
{
// Tween plane
var plane:Plane = event.target as Plane;
Tweener.addTween( plane, {
z: -150,
time:2,
transition:"easeInSin"
} );
}
}
function onPlanePress( event:InteractiveScene3DEvent ):void
{
var plane:Plane = event.target as Plane;
link();
function link(){
if (plane.z==-600){
trace("moltobene");
return;
}
else{
Tweener.addTween( plane, {
z: -600,
time:2,
transition:"easeInSin"
} );
link();
}
}
}
function rend(e:Event):void
{
render.renderScene(scene, cam, view);
}
}
}