![]() |
![]() |
|
| Condividi questo contenuto nei Social Network: |
|
Tweet |
|
|
|
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito. |
||||
|
|||||||||
Hey Amico Visitatore, Condividi con noi le tue idee e la tua conoscenza Aprendo una nuova discussione nella sezione Flash & ActionScript |
|
|
LinkBack | Strumenti di discussione |
|
|
#1 (permalink) |
|
User
Data di registrazione: Jun 2010
Messaggi: 30
|
Problema con fisheye menu
Ciao a tutti, ho un problema (probabilmente stupidissimo), ma che per me sembra quasi insormontabile, data la mia (purtroppo) scarsa dimestichezza con flash.
Sto sistemando un menu fisheye preso da un sito (se vi serve il link ve lo mando in pm, perchè non posso ancora linkare), tutto ok fino a quando non supero il numero di simboli che ci sono nel file da modificare. Premetto, che i simboli da visualizzare, vengono richiamati tramite action script. I simboli in questione sono 7, io però devo aggiungerne due in più e questo mi crea qualche problema, perchè appena aggiungo un'ottavo simbolo (creato da zero), questo non mi viene visualizzato nell'animazione finale. La cosa curiosa è che, se invece io nel codice richiamo due volte uno degli altri, si aggiunge tranquillamente un simbolo in più. Volevo quindi sapere, se c'è un'anima pia che riesce a spiegarmi dove sbaglio. Allego il codice as2 e, se vi serve, vi mando il file zippato in pm Codice:
/*
* A Fish Eye Menu in Actionscript 2
* converted by James Ford
*
* based on A Fish Eye Menu in Actionscript 3
* from shinedraw.com
*/
var IMAGES:Array = [ "image2", "image4", "image6", "image1", "image3", "image5", "image7", "image8" ]; // images
var APP_WIDTH : Number = 670; // Width of this movieclip
var APP_HEIGHT : Number = 212; // Height of this movieclip
var MARGIN:Number = 0; // Margin between images
var IMAGE_WIDTH: Number = 95; // Image width
var IMAGE_HEIGHT : Number = 181; // Image height
var MAX_SCALE:Number = 1.4; // Max scale
var MULTIPLIER:Number = 60; // Control the effectiveness of the mouse
var _images : Array = new Array(); // Store the added images
/////////////////////////////////////////////////////
// Handlers
/////////////////////////////////////////////////////
function on_added_to_stage():Void{
// add the images to the stage
addImages();
// start the mouse event handler
//stage.addEventListener(MouseEvent.MOUSE_MOVE, on_mouse_move);
}
// because we've got no document class, we need
// to start things in a more simple way
on_added_to_stage()
// mouse event handler
//function on_mouse_move():Void{
this.onMouseMove = function():Void {
//trace("on_mouse_move")
for(var i:Number = 0 ; i < _images.length; i++){
var image : MovieClip = _images[i] //as MovieClip;
// compute the scale of each image according to the mouse position
var imageScale:Number = MAX_SCALE - Math.min(MAX_SCALE - 1, Math.abs(this._xmouse - (image._x + image._width / 2)) / MULTIPLIER);
// resize the image
resizeImage(image, IMAGE_WIDTH * imageScale, IMAGE_HEIGHT * imageScale, i, IMAGES.length);
}
// sort the children according to the _yscale
sortChildren(this, "_yscale");
}
/////////////////////////////////////////////////////
// Public Methods
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
// Private Methods
/////////////////////////////////////////////////////
// add the images to the stage
function addImages():Void{
for(var i:Number = 0; i < IMAGES.length; i++){
// we can't attach bitmaps in AS2 like we do in AS3, so the bitmaps have been
// converted to movieclips and attached that way
var imageClass : String = IMAGES[i];
var image : MovieClip = this.attachMovie(imageClass, imageClass, this.getNextHighestDepth())
image.cacheAsBitmap = true;
// resize the image
resizeImage(image, IMAGE_WIDTH, IMAGE_HEIGHT, i, IMAGES.length);
_images.push(image);
}
}
// resize the image
function resizeImage(image : MovieClip, imageWidth:Number, imageHeight:Number, index:Number, total : Number):Void{
image._width = imageWidth;
image._height = imageHeight;
image._y = APP_HEIGHT/2 - image._height/2;
image._x = APP_WIDTH/ 2 + (index - (total - 1) / 2) * (MARGIN + IMAGE_WIDTH) - image._width / 2;
}
// Sort the objects according to the image width
function sortChildren(container, criteria:String) : Void {
var _numChildren:Number = IMAGES.length//container._numChildren;
//no need to sort (zero or one child)
if( _numChildren < 2 ) return ;
//create an Array to sort children
var children:Array = new Array( _numChildren );
var i:Number = -1;
while( ++i < _numChildren )
{
children[ i ] = {mc:container.getInstanceAtDepth( i ), num:container.getInstanceAtDepth( i )._yscale};
}
//sort by children by the criteria
children.sortOn( "num", Array.NUMERIC );
var child : MovieClip;
i = -1;
while( ++i < children.length )
{
child = MovieClip( children[ i ].mc );
//only set new depth if necessary
if( i != container.getInstanceAtDepth(i) )
{
//set their new position
child.swapDepths(container.getInstanceAtDepth(i))
}
}
}
|
|
|
|
|
|
|
|
#3 (permalink) |
|
User
Data di registrazione: Jun 2010
Messaggi: 30
|
Ciao Nhatan, e grazie per avermi risposto. Il menu è in as2 (ho preso questo, perchè di as3 ne capisco ancora meno
). Ecco, forse è proprio quello che mi sfugge: come faccio a fare il concatenamento? Io ho cercato di ricreare il simbolo seguendo lo stesso sistema di quelli già presenti: ho creato il nuovo simbolo image8, in cui ho inserito l'altro nuovo simbolo fl_btn8, se vuoi posso mandarti in pm il file zippato, così riesci a capire meglio quanto detto (perchè, mi rendo conto che detto così non si capisce poi granché).Grazie ancora |
|
|
|