Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Movimento di Mc su diagonali

    Salve a tutti,
    in questi giorni sto cercando di creare un'animazione in cui un mc si sposta a seconda di dove si clicchi con il mouse..

    Ho già cercato su questo forum, purtroppo però quello che mi serve non riesco a realizzarlo..

    questo è quello che son riuscito a realizzare, partendo da esempi trovati qui: Animazione Prova

    Come vedete ci sono 2 omini che si spostano con due funzioni diverse

    Omino blu
    codice:
    function muovi(casella) {
    	sposta=10;
    	endX = casella._x;
    	endY = casella._y;
    	fermati = false;
    	_root.onEnterFrame = function() {
    		if (fermati == false) {
    
    			if (_root.clip._x>endX) sopraX=true; else sopraX=false;
    			if (_root.clip._y>endY) sopraY=true; else sopraY=false;
    
    			if (Math.abs(_root.clip._x-endX)>=sposta){
    				if(sopraX) _root.clip._x -= sposta;
    				else _root.clip._x += sposta;
    			}
    			if (Math.abs(_root.clip._y-endY)>=sposta){
    				if(sopraY) _root.clip._y -= sposta;
    				else _root.clip._y += sposta;
    			}
    		}
    		if ((Math.abs(_root.clip._x-endX)<sposta) && (Math.abs(_root.clip._y-endY)<sposta)) {
    			fermati = true;
    			_root.clip._x = endX;
    			_root.clip._y = endY;
    		}
    	}
    }
    Omino rosso
    codice:
    MovieClip.prototype.myTween = function(clip, xArr, yArr, frames){
    	clip.xArr = Math.floor(xArr);
    	clip.yArr = Math.floor(yArr);
    	clip.frames = Number(frames);
    	this.onEnterFrame = function(){
    		if(Math.floor(clip._x) != clip.xArr && Math.floor(clip._y) != clip.yArr){
    			xspost = (clip.xArr-clip._x)/frames;
    			yspost = (clip.yArr-clip._y)/frames;
    			clip._x += xspost;
    			clip._y += yspost;
    		} else {
    			delete this.onEnterFrame;
    			clip._x = clip.xArr;
    			clip._y = clip.yArr;
    		}
    	}
    }
    Come potete vedere entrabe le funzioni fanno arrivare l'omino nel punto scelto, solo che vorrei che per arrivare in tal punto, il mio mc si muovesse in diagonale, seguendo così le caselle..

    Purtroppo io non so più che fare

    Qualcuno saprebbe darmi una mano?

  2. #2
    Dopo altre svariate prove ho deciso di mantenere solo l'omino blu e ho apportato un piccolo cambiamento nel codice, poichè c'era un errore nei calcoli, il codice corretto è:
    codice:
    function muovi(casella) {
    	sposta=10;
    	endX = casella._x;
    	endY = casella._y;
    	fermati = false;
    	_root.onEnterFrame = function() {
    		if (fermati == false) {
    
    			if (_root.clip._x>endX) sopraX=true; else sopraX=false;
    			if (_root.clip._y>endY) sopraY=true; else sopraY=false;
    
    			if (Math.abs(_root.clip._x-endX)>=sposta){
    				if(sopraX) _root.clip._x -= sposta;
    				else _root.clip._x += sposta;
    			}
    			if (Math.abs(_root.clip._y-endY)>=sposta){
    				if(sopraY) _root.clip._y -= sposta/2;
    				else _root.clip._y += sposta/2;
    			}
    		}
    		if ((Math.abs(_root.clip._x-endX)<sposta) && (Math.abs(_root.clip._y-endY)<sposta)) {
    			fermati = true;
    			_root.clip._x = endX;
    			_root.clip._y = endY;
    		}
    	}
    }
    Seppur ora l'andamento è più retilineo non riesco ad impedirgli di andare in maniera obliqua rispetto alle caselle che ho disegnato

  3. #3
    Utente bannato
    Registrato dal
    Nov 2004
    Messaggi
    221
    Premetto che ho letto il codice molto velocemente ma forse ti passo un'idea che può essere utile:

    fai muovere l'omino prima lungo una direzione x fino ad arrivare alla x desiderata (o fintanto che non arriva sul bordo) poi quando è sulla x giusta lo fai muovere nella y .... da quello che ho capito lui invece fa le verifiche di x ed y simultaneamente, quindi questo potrebbe darti l'effetto diagonale ....

    PS: mi scuso se ho detto una fesseria

  4. #4
    ti consiglierei di dare un'occhiata QUI

    c'è un interessante tutorial che spiega cosa e come fare

    ps: QUI trovi una demo del funzionamento se vuoi

  5. #5
    prova a fare così
    questo sul frame
    codice:
    MovieClip.prototype.tweenTo= function (x,y,steps) {
    	this._xstep=(Number(x)-this._x)/Number(steps);
    	this._ystep=(Number(y)-this._y)/Number(steps);
    	this._steps=steps;
    	this.onEnterFrame=function () { 
    		if (this._steps) {
    
    			this._x+=this._xstep;
    			this._y+=this._ystep;
    
    			this._steps--;
    		}
    		else {
    
    			delete this._xstep;
    			delete this._ystep;
    			delete this._steps;
    		
    			this.onEnterFrame=function () {}
    		
    		}
    	}
    }
    richiami la proto così e li muovi entrambi quando e come vuoi
    codice:
    oninoblue.tweenTo(20,400,10);//20 indica x di arrivo, 400y di arrivo , 10 gli step
    oninorosso.tweenTo(20,400,10);//20 indica x di arrivo, 400y di arrivo , 10 gli step
    Consulenza aziendale a 360° http://www.gruppodg.it http://www.gruppodg.it/3d
    Realizzazione siti internet, Siti Flash, Ricerca Location per bar negozi , esercizi commerciali, sviluppo pratiche e allestimento

  6. #6
    Ringrazio tutti per i suggerimenti.. purtroppo la soluzione di enigma_79 è simile a quella che avevo già trovato e non fa quello che mi serve

    L'esempio di CyberPunK è esattamente quello che volevo realizzare.. proverò a leggere quel tutorial, anche se date le mie conoscenze dell'inglese, e del mondo degli action script sarà un'esperienza dura..

    Se qualcuno conosce un tutorial e/o esempio in italiano...

  7. #7
    Dopo vari tentativi purtroppo ho capito che quella che sembrava la mia soluzione ideale, non lo era (o almeno io non riesco a sistemarlo)..

    Nell'esempio postato da CyberPunK attraverso un action script il filmato effettua il calcolo del percorso minimo, successivamente evidenzia il percorso e posiziona la freccia sul punto di arrivo.

    Il calcolo del percorso va più che bene, solo che vorrei far vedere il mio omino che lo percorre tutto, senza farlo apparire subito in fondo al tragitto, e non saprei proprio dove mettere le mani .

    Ps.
    Un'altra cosa che non mi è chiara.. com'è possibile rendere sensibile una tal area del filmato senza dichiararla come pulsante :master:
    Oltretutto le aree sensibili di questo filmato possono cambiare dinamicamente in base al contenuto di un file XML esterno

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.