Volledige versie bekijken : Mouse Scroller
Bveenhof
%Europe/Berlin %621 %2008, 14:55
Ik heb een achtergrond die reageert op de muispositie, alleen werken mijn if statements voor geen moer. Het gaat om de laatste 4 if else statements. Ik heb de het dingetje zelf ook geupload incl. de fla's.
package {
import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.events.MouseEvent;
public class Mainscript extends Sprite {
private var ldr:Holder;
private var Bg:Background;
public var tf_text:TextField = new TextField();
private var ScrollSpeed = 6;
private var Right:Number = 700;
private var Left:Number = 20;
private var Top:Number = 10;
private var Bottom:Number = 450;
public function Mainscript() {
ldr = new Holder();
Bg = new Background();
addChild( ldr );
addChild( Bg );
addChild( tf_text );
tf_text.text ="Ich bin Herr Mesdag !! Und ich solte alles vergassen !!";
tf_text.textColor = 0xFF0000;
tf_text.x = 45;
tf_text.y = 480;
tf_text.width = 550;
tf_text.height = 50;
tf_text.wordWrap = true;
addEventListener(Event.ENTER_FRAME, Scroller);
}
private function Scroller(event:Event):void {
trace(mouseX, mouseY);
if ( mouseX < 379 && mouseX > 0) {
ldr.x = ldr.x + ScrollSpeed;
} else if ( mouseX > 379 && mouseX < 758) {
ldr.x = ldr.x - ScrollSpeed;
}
if ( mouseY < 220 && mouseY > 0) {
ldr.y = ldr.y + ScrollSpeed;
} else if ( mouseY > 220 && mouseY < 440) {
ldr.y = ldr.y - ScrollSpeed;
}
if ( mouseX > Right) {
removeEventListener(Event.ENTER_FRAME, Scroller);
} else if ( mouseX < Right) {
addEventListener(Event.ENTER_FRAME, Scroller);
}
if ( mouseX > Left) {
removeEventListener(Event.ENTER_FRAME, Scroller);
} else if ( mouseX < Left) {
addEventListener(Event.ENTER_FRAME, Scroller);
}
if ( mouseY > Top) {
removeEventListener(Event.ENTER_FRAME, Scroller);
} else if ( mouseY < Top) {
addEventListener(Event.ENTER_FRAME, Scroller);
}
if ( mouseY > Bottom) {
removeEventListener(Event.ENTER_FRAME, Scroller);
} else if ( mouseY < Bottom) {
addEventListener(Event.ENTER_FRAME, Scroller);
}
}
}
}
xtr0
%Europe/Berlin %707 %2008, 16:58
Als je de EventListener weghaalt, zal de functie scroll nooit meer worden opgeroepen. Dus die laatste if-jes als
else if ( mouseX < Right) {
addEventListener(Event.ENTER_FRAME, Scroller);
}
zijn nutteloos.
Bveenhof
%Europe/Berlin %714 %2008, 17:08
Heb de scrollspeed nu veranderd ipv de evenlistener. Dat gaat inderdaad al iets beter, maar het werkt nog steeds niet goed nu. De bottom doet precies wat 'ie moet doen. De rest niet, terwijl het dezelfde soort statements zijn.
package {
import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.events.MouseEvent;
public class Mainscript extends Sprite {
private var ldr:Holder;
private var Bg:Background;
public var tf_text:TextField = new TextField();
private var Scrollspeed = 6;
private var Right:Number = 700;
private var Left:Number = 20;
private var Top:Number = 10;
private var Bottom:Number = 450;
public function Mainscript() {
ldr = new Holder();
Bg = new Background();
addChild( ldr );
addChild( Bg );
addChild( tf_text );
tf_text.text ="Ich bin Herr Mesdag !! Und ich solte alles vergassen !!";
tf_text.textColor = 0xFF0000;
tf_text.x = 45;
tf_text.y = 480;
tf_text.width = 550;
tf_text.height = 50;
tf_text.wordWrap = true;
addEventListener(Event.ENTER_FRAME, Scroller);
}
private function Scroller(event:Event):void {
trace(mouseX, mouseY);
if ( mouseX < 379 && mouseX > 0) {
ldr.x = ldr.x + Scrollspeed;
} else if ( mouseX > 379 && mouseX < 758) {
ldr.x = ldr.x - Scrollspeed;
}
if ( mouseY < 220 && mouseY > 0) {
ldr.y = ldr.y + Scrollspeed;
} else if ( mouseY > 220 && mouseY < 440) {
ldr.y = ldr.y - Scrollspeed;
}
if ( mouseX > Right) {
Scrollspeed = 0;
} else if ( mouseX < Right) {
Scrollspeed = 6;
}
if ( mouseX > Left) {
Scrollspeed = 0;
} else if ( mouseX < Left) {
Scrollspeed = 6;
}
if ( mouseY > Top) {
Scrollspeed = 0;
} else if ( mouseY < Top) {
Scrollspeed = 6;
}
if ( mouseY > Bottom) {
Scrollspeed = 0;
} else if ( mouseY < Bottom) {
Scrollspeed = 6;
}
}
}
}
xtr0
%Europe/Berlin %746 %2008, 17:55
Wat wil je nou precies bereiken?:)
Bveenhof
%Europe/Berlin %756 %2008, 18:09
Well, ik heb een layout met daarin een vlak. In dat vlak staat een achtergrond waarover je kunt scrollen (de achtergrond beweegt met je muis mee). Wanneer je met je muis over het vlak gaat moet je de achtergrond kunnen scrollen, en wanneer je het vlak weer uitgaat moet je niet meer kunnen scrollen.
Dit werkt nu alleen nog maar met de bottom, bij de andere zijdes scrolled ie vrolijk verder ...
xtr0
%Europe/Berlin %780 %2008, 18:43
Dit zou moeten werken:
package {
import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.events.MouseEvent;
public class Mainscript extends Sprite {
private var ldr:Holder;
private var Bg:Background;
public var tf_text:TextField = new TextField();
private var Scrollspeed:Number = 6;
private var Right:Number = 700;
private var Left:Number = 20;
private var Top:Number = 10;
private var Bottom:Number = 450;
public function Mainscript() {
ldr = new Holder();
Bg = new Background();
addChild( ldr );
addChild( Bg );
addChild( tf_text );
tf_text.text ="Ich bin Herr Mesdag !! Und ich solte alles vergassen !!";
tf_text.textColor = 0xFF0000;
tf_text.x = 45;
tf_text.y = 480;
tf_text.width = 550;
tf_text.height = 50;
tf_text.wordWrap = true;
addEventListener(Event.ENTER_FRAME, Scroller);
}
private function Scroller(event:Event):void {
trace(mouseX, mouseY);
if ( (mouseX < 379 && mouseX > Left) && ( mouseY < 220 && mouseY > Top))
{
ldr.x += Scrollspeed;
ldr.y += Scrollspeed;
}
else if ( (mouseX > 379 && mouseX < Right) && ( mouseY < 220 && mouseY > Top))
{
ldr.x -= Scrollspeed;
ldr.y += Scrollspeed;
}
else if ( (mouseX < 379 && mouseX > Left) && ( mouseY > 220 && mouseY < Bottom))
{
ldr.x += Scrollspeed;
ldr.y -= Scrollspeed;
}
else if ( (mouseX > 379 && mouseX < Right) && ( mouseY > 220 && mouseY < Bottom))
{
ldr.x -= Scrollspeed;
ldr.y -= Scrollspeed;
}
}
}
}
Bveenhof
%Europe/Berlin %801 %2008, 19:14
Yup, het werkt idd :) Thnx man! Wat heb je precies gedaan? Of wat heb ik gedaan wat niet klopte?
xtr0
%Europe/Berlin %814 %2008, 19:33
Ik heb de functie wat anders geschreven. Ik kijk of de muis zich linksboven, rechtsboven, linksonder of rechtsonder bevindt van de map. Als dit zo is laat ik de map bewegen. Als dit niet zo is gebeurd er niks.
Bveenhof
%Europe/Berlin %821 %2008, 19:42
Idd ja, ipv nieuwe statements staat alles in 1 statement. Lijkt netter en logischer zo.
Hoe kan ik er eigenlijk een ease in zetten?
xtr0
%Europe/Berlin %833 %2008, 20:00
Zo staat er een ease in:
package {
import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.events.MouseEvent;
public class Mainscript extends Sprite {
private var ldr:Holder;
private var Bg:Background;
public var tf_text:TextField = new TextField();
private var Scrollspeed:Number = 0;
private var maxScrollspeed:Number = 6;
private var acc:Number = 0.5;
private var up:Boolean = false;
private var right:Boolean = false;
private var Right:Number = 700;
private var Left:Number = 20;
private var Top:Number = 10;
private var Bottom:Number = 450;
public function Mainscript() {
ldr = new Holder();
Bg = new Background();
addChild( ldr );
addChild( Bg );
addChild( tf_text );
tf_text.text ="Ich bin Herr Mesdag !! Und ich solte alles vergassen !!";
tf_text.textColor = 0xFF0000;
tf_text.x = 45;
tf_text.y = 480;
tf_text.width = 550;
tf_text.height = 50;
tf_text.wordWrap = true;
addEventListener(Event.ENTER_FRAME, Scroller);
}
private function Scroller(event:Event):void {
trace(mouseX, mouseY);
if ( (mouseX < 379 && mouseX > Left) && ( mouseY < 220 && mouseY > Top))
{
if (Scrollspeed < maxScrollspeed)
{
Scrollspeed += acc;
}
up = false;
right = true;
}
else if ( (mouseX > 379 && mouseX < Right) && ( mouseY < 220 && mouseY > Top))
{
if (Scrollspeed < maxScrollspeed)
{
Scrollspeed += acc;
}
up = false;
right = false;
}
else if ( (mouseX < 379 && mouseX > Left) && ( mouseY > 220 && mouseY < Bottom))
{
if (Scrollspeed < maxScrollspeed)
{
Scrollspeed += acc;
}
up = true;
right = true;
}
else if ( (mouseX > 379 && mouseX < Right) && ( mouseY > 220 && mouseY < Bottom))
{
if (Scrollspeed < maxScrollspeed)
{
Scrollspeed += acc;
}
up = true;
right = false;
}
else
{
if (Scrollspeed > 0)
{
Scrollspeed -= acc;
}
}
if(up)
{
ldr.y -= Scrollspeed;
}
if(!up)
{
ldr.y += Scrollspeed;
}
if(right)
{
ldr.x += Scrollspeed;
}
if(!right)
{
ldr.x -= Scrollspeed;
}
}
}
}
Het is niet echt netjes gescript en kan nog wel wat compacter, maar had het even snel gedaan. Ik zou je framerate trouwens even omhoog gooien anders schokt het heel erg.
Met acc bepaal je de versnelling en met maxScrollspeed de maximale snelheid.
Bveenhof
%Europe/Berlin %842 %2008, 20:13
Thnx man ! Het enige wat ik nog nodig heb zijn borders, maar daar ga ik zelf nu mee kloten :)
Bveenhof
%Europe/Berlin %860 %2008, 20:39
Toch nog een klein dingetje ... Het werkt op deze manier niet echt heel prettig. Op de screenshot staat hoe het waarschijnlijk beter werkt. Volgens mij is het niet veel meer dan een paar maten toevoegen / aanpassen. Ik weet alleen niet precies welke maten ik dan aan moet passen.
theFlashWizard
%Europe/Berlin %427 %2008, 10:15
Is het uberhaupt niet handiger deze scrolling functionaliteit in een apart (reusable) class te stoppen?
Met properties als constrain, scrollX, scrollY enz kan deze erg handig worden. Door deze scheiding blijft alles vaak ook wat overzichtelijker.
Nog iets waar ik me aan iriteerde:
if(up)
{
ldr.y -= Scrollspeed;
}
if(!up)
{
ldr.y += Scrollspeed;
}
if(right)
{
ldr.x += Scrollspeed;
}
if(!right)
{
ldr.x -= Scrollspeed;
}
Zou ik bijv. zo doen:
if(right) ldr.x += scrollspeed;
else ldr.x -= scrollSpeed
if(up) ldr.y -= scrollspeed
else ldr.y += scrollspeed;
of zelfs zo:
ldr.x += (right)? scrollspeed : -scrollspeed;
ldr.y += (up)? scrollspeed : -scrollspeed;
Bveenhof
%Europe/Berlin %836 %2008, 20:04
Hey Peter,
Dat staat idd ff een stukkie netter :)
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.