PDA

Просмотр полной версии : startDrag() для плеера


telit
03.07.2007, 22:30
Значит задача состоит в том, чтобы сделать плавный ползунок( с помощью Drag ), например для контроля уровня звука или pan.

....
public function CoolPlayer( ) {

_volumeControl = new VolumeControl( );
_volumeControl.x = 45;
_volumeControl.y = 68;
addChild(_volumeControl);
_volumeControl.addEventListener(Event.CHANGE,
onTransform);

_panControl = new PanControl( );
_panControl.x = 164;
_panControl.y = 68;
addChild(_panControl);
_panControl.addEventListener(Event.CHANGE,
onTransform);
}

public function onTransform(event:Event):void
{
// Get volume and pan data from controls
// and apply to a new SoundTransform object
_channel.soundTransform = new SoundTransform(
_volumeControl.volume,
_panControl.pan);
}

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.DropShadowFilter;
import flash.geom.Rectangle;

class VolumeControl extends Sprite {
public var volume:Number = 1.0;

public function VolumeControl( )
{
addEventListener(MouseEvent.CLICK, onClick);
draw( );
}

public function onClick(event:MouseEvent):void
{
// When user clicks the bar, set the volume
volume = event.localX / 100;
draw( );
dispatchEvent(new Event(Event.CHANGE));
}

private function draw( ):void {
// Draw a bar and the current volume position
graphics.beginFill(0xcccccc);
graphics.drawRect(0, 0, 102, 16);
graphics.endFill( );

graphics.beginFill(0x000000);
graphics.drawRect(volume * 100, 0, 2, 16);
}
}

class PanControl extends Sprite {
public var pan:Number = 0;

public function PanControl( )
{
addEventListener(MouseEvent.CLICK, onClick);
draw( );
}

public function onClick(event:MouseEvent):void
{
// When the user clicks bar, set pan
pan = event.localX / 50 - 1;
draw( );
dispatchEvent(new Event(Event.CHANGE));
}

private function draw( ):void {
// Draw the bar and current pan position
graphics.beginFill(0xcccccc);
graphics.drawRect(0, 0, 102, 16);
graphics.endFill( );

graphics.beginFill(0x000000);
graphics.drawRect(50 + pan * 50, 0, 2, 16);
}
}

Что такое хорошо?
03.07.2007, 23:29
и что?

etc
03.07.2007, 23:30
telit, отредактируйте свой пост и оформите код тегами .

telit
03.07.2007, 23:32
и нужен ПЛАВНЫЙ ПОЛЗУНОК, а у меня только деревянный получается :(

etc
03.07.2007, 23:36
Я себе не очень хорошо представляю плавный ползунок. Это как? Ползунок, который за мышкой не успевает?

telit
03.07.2007, 23:51
Плавный - это, чтобы значение (например громкости звука) изменялось по ходу движения а не тогда когда нажимаешь!!

etc
04.07.2007, 00:00
И в чем проблема? Сделать drag?

telit
04.07.2007, 00:17
сделать правильный драг причём чтобы его значение изменялось плавно ( Timer ) П.с стандартный компонент не предлагать ;)

etc
04.07.2007, 00:40
Ну… ENTER_FRAME (либо Timer) в руки и простенькое уравнение типа x += (newX-x)/5…

telit
04.07.2007, 01:24
не понимаю как это делается

dragger.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
...
private function onDown(event:MouseEvent):void
{
event.target.startdrag(false, _rectangle); //_rectangle задаем заранее
}
//это всё... а как вставить сюда onTimer, чтобы получать значения ползунка в ЕнтерФрайме

etc
04.07.2007, 01:52
Теги для кода опять забываем?

silin
04.07.2007, 10:51
немног странное желание вставить таймер, чтоб получать данные в ентерФраме..
в том смысле что если вставлять таймер, то в его событии и получать
dragger.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
var _rectangle:Rectangle=new Rectangle(0,0,300,0);
var timer:Timer=new Timer(10);
timer.addEventListener(TimerEvent.TIMER,report);
function report(evnt:TimerEvent){
trace(dragger.x);
}
function onDown(event:MouseEvent):void {
dragger.startDrag(false, _rectangle);
timer.start();
}
если надо в ентерФраме, то зачем таймер
dragger.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
var _rectangle:Rectangle=new Rectangle(0,0,300,0);
function report(evnt:Event){
trace(dragger.x);
}
function onDown(event:MouseEvent):void {
dragger.startDrag(false, _rectangle);
dragger.addEventListener(Event.ENTER_FRAME, report);
}
а по мне так логичнее по маусМув все и получать (если ползунок не двигается, то и менять ничего не надо ведь)
dragger.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
var _rectangle:Rectangle=new Rectangle(0,0,300,0);

function report(evnt:MouseEvent){
trace(dragger.x);
}
function onDown(event:MouseEvent):void {
dragger.startDrag(false, _rectangle);
dragger.addEventListener(MouseEvent.MOUSE_MOVE, report);
}

__i
04.07.2007, 14:31
а по мне так логичнее по маусМув все и получать (если ползунок не двигается, то и менять ничего не надо ведь)


Логично, но это отлично работает в ас1-2, в 3 когда мы уводим мышь с объекта то он нифига не слушает этот маус мув (. Маус мув нужно вешать на стейдж или хотя бы какой-то "большой" родительский объект.

silin
04.07.2007, 15:04
дада: существенное замечание, этот нюанс надо учитывать..
зы: в блогах __etc и miramax опубликованы решения проблемы