Flashhilfe.de - Flash Community

AS3 - Drehregler für Radio [Flash 11]

 


AntwortenRegistrieren Seite1  

Liliana#1
Benutzerbild von Liliana
Beiträge: 4
Registriert: Jun 2012

30.06.2012, 22:13

Hallo,

ich möchte mit AS3 eine Radio nachbauen und bräuchte Hilfe beim Drehregler, mit dem man die Frequenz auswählen kann (siehe Screenshot):

Der Regler kann mit Drag&Drop gedreht werden und der "aktive" Drehbereich liegt zwischen 0°, dem geringsten Wert, und 270°, dem größten Wert. Fährt man mit gedrückter Maustaste darüber hinaus bleibt der Regler entweder bei 0° oder 270° stehen, je nachdem von welcher Seite man diesen aktiven Bereich verlassen hat.

Das Problem ist nun folgendes: wenn ich z.B. auf 270° bin, bleibt zwar der Regler dort stehen, fahre ich aber mit gedrückter Maus die Runde über die inaktive Fläche weiter und komme wieder zu 0° springt der Regler auch dort hin. Genau das möchte ich verhindern.

Beispiele wie ich den Regler gerne hätte:
http://aaronhardy.com/flex/skinnable-knob-component/

http://keith-hair.net/blog/examples/niceknobs2/index.html


Ich suche schon sehr lange nach einer Lösung und weder Bücher noch Google helfen mir weiter.
Auch über die Suchfunktion hier habe ich leider nichts gefunden, das mir weiter hilft. Für Hilfe wäre ich sehr dankbar.

Angehängte Dateien:
Bild regler.png51.06 KB
Geändert von Liliana am 30.06.12 um 22:14 Uhr
Kerstin77#2
Benutzerbild von Kerstin77
Beiträge: 1004
Registriert: Jul 2008

01.07.2012, 19:38

Hi,

entferne den EventListener beim verlassen der aktiven Fläche. Bei Klick auf den Regler wird er wieder hinzugefügt.

Grüße,
Kerstin
Wer Rechtschreibfehler findet, darf sie gerne behalten.
Liliana#3
Benutzerbild von Liliana
Beiträge: 4
Registriert: Jun 2012

Themenautor/in

01.07.2012, 20:27

Hallo,

danke, aber das ist nicht das was ich meine. Vielleicht habe ich mich falsch ausgedrückt. Ich möchte, dass wenn man die Maustaste noch gedrückt hält und den Regler größer als 270° dreht, der Regler stehen bleibt und falls ich aber mit der Maus weiter fahre und wieder über die 360°/0° hinaus, der Regler dort nicht hin springt, sondern weiter bei 270° bleibt, bis man wieder zurück dreht.

Wäre also eine Umdrehung von 360° möglich, soll man den Regler also nur einmal umdrehen können. Ist das leichter umzusetzen?

Hier noch der Regler -> drehregler.zip (40.84 KB)
Kerstin77#4
Benutzerbild von Kerstin77
Beiträge: 1004
Registriert: Jul 2008

01.07.2012, 20:43

Ah sorry, falsch verstanden.
Deine Datei kann ich leider nicht öffnen, hab nur CS4.
Wer Rechtschreibfehler findet, darf sie gerne behalten.
Liliana#5
Benutzerbild von Liliana
Beiträge: 4
Registriert: Jun 2012

Themenautor/in

01.07.2012, 21:05

Hier die CS4 Version.

Angehängte Dateien:
Komprimierte Datei regler_cs4.zip40.72 KB
Kerstin77#6
Benutzerbild von Kerstin77
Beiträge: 1004
Registriert: Jul 2008

02.07.2012, 00:16

Hi,

sorry hat etwas gedauert. Musste zwischendurch noch Essen für morgen kochen. Ungefähr so sollte es funktionieren:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;

var dreher:Dreher;
var dreherbg:Dreherbg;
var angle:Number;
var lastAngle:Number;
var checkDirection:Boolean;
var toLeft:Boolean;

dreherbg = new Dreherbg();
dreherbg.x = 200;
dreherbg.y = 200;
addChild(dreherbg);

dreher = new Dreher();
dreher.x = 196;
dreher.y = 194;
addChild(dreher);

dreher.addEventListener(MouseEvent.MOUSE_DOWN, drehen_drag);
function drehen_drag(event:MouseEvent) {
     dreher.addEventListener(MouseEvent.MOUSE_MOVE,drehen);
}

dreher.addEventListener(MouseEvent.MOUSE_UP, drehen_drop);
function drehen_drop(event:MouseEvent){
     dreher.removeEventListener(MouseEvent.MOUSE_MOVE, drehen);
}

function drehen(event:MouseEvent){
     angle = Math.atan2(mouseY - dreher.y, mouseX - dreher.x) * 180 / Math.PI + 90;
     angle < 0 ? checkDirection = true : checkDirection = false;
     if (checkDirection) {
        if (lastAngle <= 270 && lastAngle > 260) {
           toLeft = false;
        } else if (lastAngle >= 0 && lastAngle < 10) {
           toLeft = true;
        }
        dreher.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
        dreher.addEventListener(MouseEvent.MOUSE_MOVE, checkRotation);
     } else {
        dreher.rotation = angle;
     }
     lastAngle = angle;
}

function checkRotation(evt:MouseEvent):void {
     angle = Math.atan2(mouseY - dreher.y, mouseX - dreher.x) * 180 / Math.PI + 90;
     if (toLeft) {
        if (angle >= 0 && angle < 10) {
           dreher.addEventListener(MouseEvent.MOUSE_MOVE,drehen);
           dreher.removeEventListener(MouseEvent.MOUSE_MOVE, checkRotation);
        }
     } else {
        if (angle <= 270 && angle > 260) {
           dreher.addEventListener(MouseEvent.MOUSE_MOVE,drehen);
           dreher.removeEventListener(MouseEvent.MOUSE_MOVE, checkRotation);
        }
     }
}


Grüße,
Kerstin
Wer Rechtschreibfehler findet, darf sie gerne behalten.
Liliana#7
Benutzerbild von Liliana
Beiträge: 4
Registriert: Jun 2012

Themenautor/in

02.07.2012, 00:21

Dankedankedanke :D Genau das wars! So was ähnliches hatte ich auch schon versucht, hat aber nie funktioniert.

Danke dir vielmals!

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2021 Sebastian Wichmann - Flashhilfe.de