Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Scroller di MovieClip senza Componenti

This is a discussion on Scroller di MovieClip senza Componenti within the Utilità degli utenti di FlepStudio forums, part of the Flash Italiano category; Salve a Tutti Ragazzi, In Anzitutto mi Presento: Mi Chiamo Stefano, ho 18 anni è sono un Programmatore. Ora Premetto che ...


Go Back   Forum Flash CS3 Flash CS4 > Flash CS3 Flash CS4 > Flash Italiano > Utilità degli utenti di FlepStudio

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 07-10-07, 12:25
StefanoV's Avatar
Programmer
 
Join Date: Jan 1970
Location: Crotone
Posts: 12
Rep Power: 0
StefanoV is on a distinguished road
Send a message via MSN to StefanoV
Cool Scroller di MovieClip senza Componenti

Salve a Tutti Ragazzi,

In Anzitutto mi Presento:
Mi Chiamo Stefano, ho 18 anni è sono un Programmatore.

Ora Premetto che devo Ringraziare molto FlepStudio e quindi Flep(Filippo) per le guide, che mi hanno Facilitato il Compito nel Passaggio da AS2 ad AS3...

Passiamo ora al Motivo del Thread:
Creare uno Scroller di MovieClip, Disegnato Completamente da noi, e senza usare Componenti!

Allora,
Apriamo Flash e creiamo un file .fla che chiamiamo scroller,
inseriamo all'interno dello stage un nuovo MovieClip, con nome di Istanza "mcScroller".

Poniamoci All'interno di mcScroller, e creiamo 5 Livelli:
bottoni, scrollFace, [/b]scrollTrack[/b], un livello maschera chiamato "maschera" ed il suo mascherato chiamato "[/b]contenuto[/b]".

Ora, nel Livello Bottoni disegnamo i due bottoni per scrollare su e giu, li trasformiamo in Movieclip con allineamento in alto a sinistra, e gli diamo il nome di istanza btnUp per il pulsante che scrolla in su, e btnDown per quello che scrolla in giu!

Nel Livello scrollTrack disegnamo la traccia sulla quale scorrerà la nostra scrollFace(la parte trascinabile della scroll), che naturalmente sta tra un pulsante e l'altro.
Trasformiamo in MovieClip con allineamento in alto a sinistra e diamo il nome di istanza: scrollTrack

Nel Livello scrollFace disegnamo la parte trascinabile della scroll, trasformiamo in MovieClip con allineamento in alto a sinistra, e diamo il nome d'istanza: scrollFace
Posizioniamolo in alto alla scrollTrack(la posizione di partenza della scroll!)

Nel Livello Maschera, disegniamo una maschera che sarà la parte che sarà mostrata della scroll!
Trasformiamo in MovieClip con allineamento in alto a sinistra e diamo il nome d'istanza: ciste

Infine, nel Livello contenuto, creiamo un movieClip con nome di Istanza: [b]contentMain[b/]
ed inseriamo il Contenuto a partire dal centro del MovieClip verso il basso (in modo che l'allineamento del MC finale sia in alto!)

Quando avremo finito, posizioniamo il MovieClip contentMain, esattamente sotto la maschera...

Dopo aver Disegnato creiamo la Nostra Classe:
Creiamo un File Scroller.as e assegniamolo come Document Class dal file: scroller.fla

Scriviamo il Codice della Classe:

Code:
package
{
	import flash.display.MovieClip;
	import fl.transitions.Tween;
	import fl.transitions.easing.Strong;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Rectangle;
	
	public class Scroller extends MovieClip
	{
		private var scrollHeight:Number;
		private var contentHeight:Number;
		private var scrollFaceHeight:Number;
		private var maskHeight:Number;
		private var initPosition:Number;
		private var initContentPos:Number;
		private var finalContentPos:Number;
		
		private var left:int;
		private var top:int;
		private var right:int;
		private var bottom:int;
		
		private var dy:Number = 0;
		private var speed:Number = 10;
		private var speedScroll:Number = 2;
		private var moveVal:Number;
		
		private var controllo:Tween;
		private var area:Rectangle;
		
		public function Scroller()
		{
			stage.frameRate = 31;
			mcScroller.scrollTrack.buttonMode = true;
			mcScroller.scrollFace.buttonMode = true;
			mcScroller.btnUp.buttonMode = true;
			mcScroller.btnDown.buttonMode = true;
			
			scrollHeight = mcScroller.scrollTrack.height;
			contentHeight = mcScroller.contentMain.height;
			scrollFaceHeight = mcScroller.scrollFace.height;
			maskHeight = mcScroller.ciste.height;
			initPosition = mcScroller.scrollFace.y = mcScroller.scrollTrack.y;
			initContentPos = mcScroller.contentMain.y;
			finalContentPos = maskHeight - contentHeight + initContentPos + 1;
			
			left = mcScroller.scrollTrack.x;
			top = mcScroller.scrollTrack.y;
			right = mcScroller.scrollTrack.x;
			bottom = mcScroller.scrollTrack.height - scrollFaceHeight + mcScroller.scrollTrack.y;
				
			moveVal = (contentHeight - maskHeight) / (scrollHeight-scrollFaceHeight);
		
			scrolling();
		}
		
		public function scrolling():void
		{
			mcScroller.scrollFace.addEventListener(MouseEvent.MOUSE_DOWN, sfPress);
			mcScroller.scrollFace.addEventListener(MouseEvent.MOUSE_UP, sfUp);
			mcScroller.scrollFace.addEventListener(MouseEvent.MOUSE_OUT, sfUp);
			
			mcScroller.btnUp.addEventListener(MouseEvent.MOUSE_DOWN, bpPress);
			mcScroller.btnUp.addEventListener(MouseEvent.MOUSE_UP, bpDo);
			mcScroller.btnUp.addEventListener(MouseEvent.MOUSE_OUT, bpDo);
			
			mcScroller.btnDown.addEventListener(MouseEvent.MOUSE_DOWN, bdPress);
			mcScroller.btnDown.addEventListener(MouseEvent.MOUSE_UP, bdDo);
			mcScroller.btnDown.addEventListener(MouseEvent.MOUSE_OUT, bdDo);
			
			if(contentHeight<maskHeight)
			{
				mcScroller.scrollFace.visible = false;
				
				mcScroller.bntUp.enabled = false;
				
				mcScroller.btnDown.enabled = false;
			}
			else
			{
				mcScroller.scrollFace.visible = true;
				
				mcScroller.btnUp.enabled = true;
				
				mcScroller.btnDown.enabled = true;
			}
			
			mcScroller.scrollTrack.addEventListener(MouseEvent.MOUSE_DOWN, stPress);
			mcScroller.scrollTrack.addEventListener(MouseEvent.MOUSE_OUT, stDo);
			mcScroller.scrollTrack.addEventListener(MouseEvent.MOUSE_UP, stDo);
			
			mcScroller.addEventListener(MouseEvent.MOUSE_WHEEL, wheel);
		}
		
		private function wheel(e:MouseEvent):void
		{
			if(e.delta < 0)
			{
				if(mcScroller.scrollFace.y < bottom-1)
				{
					mcScroller.scrollFace.y -= (e.delta * speedScroll);
					
					easeScroll();
				}
				else
				{
					mcScroller.scrollFace.y = bottom;
					
					easeScroll();
				}
			}
			else
			{
				if(mcScroller.scrollFace.y > top + 1)
				{
					mcScroller.scrollFace.y -= (e.delta * speedScroll);
					
					easeScroll();
				}
				else
				{
					mcScroller.scrollFace.y = top;
					
					easeScroll();
				}
			}
		}
		
		private function stDo(e:MouseEvent):void
		{
				
			e.target.removeEventListener(Event.ENTER_FRAME, stEf);
		}
		
		private function stPress(e:MouseEvent):void
		{
			var clickY:Number = mouseY-mcScroller.scrollTrack.height;
			var spB:Number = bottom-mcScroller.scrollFace.height+(mcScroller.btnDown.height*2);
			var spT:Number = top+mcScroller.scrollFace.height-(mcScroller.btnUp.height*2);
			
			if(clickY > spT && clickY < spB)
			{
				mcScroller.scrollFace.y = clickY;
			}
			else if(clickY > spB)
			{
				mcScroller.scrollFace.y = bottom;
			}
			else if(clickY < spT)
			{
				mcScroller.scrollFace.y = top;
			}
			
			e.target.addEventListener(Event.ENTER_FRAME, stEf);
		}
		
		private function stEf(e:Event):void
		{
			easeScroll();
		}
		
		private function bdDo(e:MouseEvent)
		{
			e.target.removeEventListener(Event.ENTER_FRAME, bdEf);
		}
		
		private function bdPress(e:MouseEvent):void
		{
			e.target.addEventListener(Event.ENTER_FRAME, bdEf);
		}
		
		private function bdEf(e:Event):void
		{
			if(mcScroller.contentMain.y-speed>finalContentPos)
			{
				if(mcScroller.scrollFace.y>=bottom)
				{
					mcScroller.scrollFace.y = bottom;
				}
				else
				{
					mcScroller.scrollFace.y += speed/moveVal;
				}
				easeScroll();
			}
			else
			{
				mcScroller.scrollFace.y = bottom;
				e.target.removeEventListener(Event.ENTER_FRAME, bdEf);
			}
		}
		
		private function bpDo(e:MouseEvent):void
		{
			e.target.removeEventListener(Event.ENTER_FRAME, bpEf);
		}
		
		private function bpPress(e:MouseEvent):void
		{
			e.target.addEventListener(Event.ENTER_FRAME, bpEf);
		}
		
		private function bpEf(e:Event):void
		{
			if(mcScroller.contentMain.y+speed<mcScroller.ciste.y)
			{
				if(mcScroller.scrollFace.y<=top)
				{
					mcScroller.scrollFace.y = top;
				}
				else
				{
					mcScroller.scrollFace.y -= speed/moveVal;
				}
				easeScroll();
			}
			else
			{
				mcScroller.scrollFace.y = top;
				e.target.removeEventListener(Event.ENTER_FRAME, bpEf);
			}
		}
		
		private function sfUp(e:MouseEvent):void
		{
			e.target.stopDrag();
			e.target.removeEventListener(MouseEvent.MOUSE_MOVE, sfMove);
		}
		
		private function sfPress(evt:MouseEvent):void
		{
	
			var larg:Number = 0;
			var alt:Number = mcScroller.scrollTrack.height - mcScroller.scrollFace.height;
			area = new Rectangle(left,top,larg,alt);
			var currPos:Number = this.y;
			evt.target.startDrag(false,area);
			evt.target.addEventListener(MouseEvent.MOUSE_MOVE, sfMove);
		}
		
		private function sfMove(e:MouseEvent):void
		{
			easeScroll();
		}
		
		private function easeScroll():void
		{
			dy = Math.abs(initPosition - mcScroller.scrollFace.y);
			controllo = new Tween(mcScroller.contentMain,"y", Strong.easeOut,mcScroller.contentMain.y, Math.round(dy*-1*moveVal+initContentPos),30, false);
		}
	}
}
Ed Ecco il Risultato:

ImageShack - Hosting :: scrollerjp4.swf

La Scroll può essere mossa tramite: i pulsanti, il drag della scrollFace, il click sulla scrollTrack, lo scroll del mouse.

La velocità di scroll del mouse, può essere cambiata modificanto la variabile: speedScroll

La velocità di scroll con i pulsanti, tramite la variabile speed

In Allegato i Sorgenti da Scaricare compreso .fla, .as, .swf:


@Flep: Sono Accettati Commenti, Critiche, Bestemmie, e quant'altro!
Attached Files
File Type: zip MovieClip Scroller.zip (27.3 KB, 60 views)


Last edited by Flep; 13-05-08 at 20:00..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 07-10-07, 16:01
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,535
Rep Power: 6
Flep is on a distinguished road
Re: Scroller di MovieClip senza Componenti

Ciao Stefano e grazie per la risorsa.
Un piccolo appunto, c'è un problema con lo scroll, se col mouse esci dall' area di scrollFace mentre stai scrollando, si ferma tutto.
Io l' ho trovato un po scomodo e credo sia una piccola svista nel codice.

Grazie ancora
__________________

 


I recommend: Essential Actionscript 3.0

- I do not reply technicians pvt messages. Open a thread !
- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 07-10-07, 16:44
StefanoV's Avatar
Programmer
 
Join Date: Jan 1970
Location: Crotone
Posts: 12
Rep Power: 0
StefanoV is on a distinguished road
Send a message via MSN to StefanoV
Riferimento: Scroller di MovieClip senza Componenti

è questo codice:

Code:
mcScroller.scrollFace.addEventListener(MouseEvent.MOUSE_OUT, sfUp);
Togliendolo anke trascinando al di fuori la scroll continua... ma succede una cosa al quanto strana.... prova un pò tu con i sorgenti in allegato, vedrai che se scrolli veloce su e giu...il contentMain rimane incantato giu, e la scrollFace segue il mouse anke dopo aver rilasciato...

Sai Percaso come correggere Flep?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #4 (permalink)  
Old 08-10-07, 07:35
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,535
Rep Power: 6
Flep is on a distinguished road
Re: Scroller di MovieClip senza Componenti

Dovrei mettermi a studiare il codice...non ne ho il tempo
__________________

 


I recommend: Essential Actionscript 3.0

- I do not reply technicians pvt messages. Open a thread !
- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #5 (permalink)  
Old 13-03-08, 23:45
Junior Member
 
Join Date: Jan 2008
Posts: 7
Rep Power: 0
grptx is on a distinguished road
Re: Scroller di MovieClip senza Componenti

ciao,
innanzitutto complimenti per lo scroller :)
feci anch'io una cosa del genere qualche tempo fa per un cliente: :: Billo e Pallina ::
era però in Flash8, quasi quasi mi hai fatto venire voglia di provare a convertirlo per CS ;)

p.s. complimenti per il sito ;)

gx
__________________
blog : myspace : work
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump

Similar Threads

Thread Thread Starter Forum Replies Last Post
Flash CS3 Filmati flash senza audio Eugene Flash Italiano 2 01-08-08 09:14
Sito senza Frame j0k3r CSS | HTML 13 10-07-08 12:09
Upload x speed test senza browse Asterix2000 Actionscript 3.0 base 2 04-06-08 08:07
caricare URL da XML senza document class bulga Actionscript 3.0 base 0 12-04-08 14:25
Immagini senza perdita di qualità manTiz Actionscript 3.0 base 4 26-07-07 14:57


All times are GMT. The time now is 18:31.

Powered by vBulletin version 3.7.4
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0 RC4
Forum SiteMap