Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    31

    AS3 - Problema con rotazione ellittica e gestione della profondità

    Ciao a tutti, scusate se il titolo non è molto chiaro, ma mi sono appena svegliato e non mi veniva niente di meglio xD!

    Comunque, ho realizzato questo "menu" rotante, che ora per testarlo ha tutti i bottoni uguali.

    Questo menu rotea su un'ellissi, ma non riesco a gestire la profondità dell'ultimo item del menu.
    Se fate fare almeno un giro al menu, vi accorgerete che ad un certo punto c'è una clip che si comporta in modo scorretto.

    Per aiutare nella comprensione, vi posto il codice:
    codice:
    // Imposto il centro dell'ellissi
    var centroX:Number = this.width / 2;
    var centroY:Number = this.height * 0.6;
    
    var mousePos = ( ( this.mouseX - centroX ) / 100 );
    var angle:Number = menu.length();
    
    function on_enter_frame(e:Event):void
    {
    	if ( this.mouseY < this.movAreaSensibile.y )
    	{
    		mousePos += 0.2;
    	}
    	else
    	{
    		if ( ( ( this.movAreaSensibile.mouseX - centroX ) / 100 ) > 2 )
    		{
    			mousePos += 2;
    		}
    		else if ( ( ( this.movAreaSensibile.mouseX - centroX ) / 100 ) < -2 )
    		{
    			mousePos -= 2;
    		}
    		else
    		{
    			mousePos += ( ( this.movAreaSensibile.mouseX - centroX ) / 100 );
    		}
    	}
    	
    	for ( var i:Number = 0; i < playerini.length(); i++ )
    	{
    		var depth:Number = ( ( mousePos + ( (360 / angle) * i ) ) * Math.PI ) / 180;
    		
    		menu.getItemByIndex(i).x = centroX - ( Math.sin( depth ) * 430 ) - (menu.getItemByIndex(i).width / 2);
    		menu.getItemByIndex(i).y = centroY + ( Math.cos( depth ) * 130 );
    		menu.getItemByIndex(i).scaleX = ((100 + ( Math.cos( depth ) * 50 )) / 100);
    		menu.getItemByIndex(i).scaleY = ((100 + ( Math.cos( depth ) * 50 )) / 100);
    		
    		if ( i != (menu.length() - 1) )
    		{
    			// gira in senso orario
    			if ( Math.sin(depth) > 0 )
    			{
    				this.movPlaylist.setChildIndex(menu.getItemByIndex(i), 0);
    			}
    			// gira in senso anti-orario
    			else
    			{
    				this.movPlaylist.setChildIndex(menu.getItemByIndex(i), this.movPlaylist.numChildren - 1);
    			}
    		}
    	}
    	
    }
    Grazie a tutti in anticipo! Ciao!
    Ciamiz

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Questa è la stessa cosa ma con una funzione in più "arrange()" che gestisce le profondità a seconda della posizione:

    Codice PHP:
    var data:Object = {numOfItems:20radiusX:275radiusY:80centerX:int(stage.stageWidth 0.5), centerY:int(stage.stageHeight 0.5), speed:0.05};
    var 
    items:Array = [];
    for (var 
    i:uint=0i<data.numOfItemsi++) {
        
    items.push(addChild(new Item()) as Item);
        
    items[i].name "target"+i;
        
    items[i].ang * (Math.PI) / data.numOfItems;
        
    items[i].filters = [new GlowFilter(0xFFFF800.58.08.022)];
        
    items[i].addEventListener(Event.ENTER_FRAMEenterframe);
    }
    function 
    enterframe (evt:Event):void {
        var 
    t:Item evt.target as Item;
        
    t.data.radiusX Math.cos(t.ang) + data.centerX;
        
    t.data.radiusY Math.sin(t.ang) + data.centerY;
        
    t.ang += data.speed;
        
    t.scaleX t.scaleY t./ (data.radiusY data.centerY);
        
    arrange();
    }
    function 
    arrange():void {
        
    items.sortOn("y", Array.NUMERIC);
        var 
    i:int items.length;
        while(
    i--){
            if (
    getChildIndex(items[i]) != i) {
                
    setChildIndex(items[i], i);
            }
        }
    }
    stage.addEventListener(MouseEvent.MOUSE_MOVE, function (evt:MouseEvent):void data.speed = (mouseX-data.centerX)/4000; }); 
    Nel mio esempio c'è un clip concatenato come classe Item, in libreria.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    31
    Ok innanzitutto grazie per la risposta.

    E poi... grazie per il suggerimento! Ho provato, e con qualche accorgimento ha funzionato anche per me!

    Grazie Mille!
    Ciao!

    Ciamiz

  4. #4
    Utente di HTML.it L'avatar di daryl74
    Registrato dal
    Jun 2001
    Messaggi
    125
    Sto provando a riadattare il codice postato da AND80 ma ho dei problemi in compilazione con l'elemento "Item".

    Qualcuno può aiutarmi ?

    DaryL74

  5. #5
    Potresti provare a postare l'errore che ti esce quando esporti il filmato. Così possiamo capire meglio cosa c'è che non va...

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Considera che "Item" può essere una classe esterna o un elemento nella libreria che era già presente nel progetto di Ciamiz. Quindi la dovresti sostituire con un altro elemento.

  7. #7
    Utente di HTML.it L'avatar di daryl74
    Registrato dal
    Jun 2001
    Messaggi
    125
    Grazie AND80, ho creato in libreria un clip contenente un quadrato nero dandogli come classe "Item"e il codice funzione. Adesso devo solo capire come caricare dentro i clip "Item" delle immagini esterne leggendone i nomi da un XML.

    Grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.