トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     as3.0 でボリュームコントロールを作成したい
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
tanakasan
Åê¹ÆNo.46498
投稿日時: 2010-12-7 5:28
新米
居住地:
投稿: 3
使用環境:
winVista (32bit)
Flash CS4・CS5
Flash Player 8.9.10
as3.0 でボリュームコントロールを作成したい
初めまして。
色々検索している間にここに辿り着きましたので、書き込みさせていただきます。


疑問は、題名の通りです。

音量が上下出来る、再生・停止ができる、音量によって(画像?が上下しているようなやつ。)動くコントローラを作成したいのですが、AS2.0のサンプルが落ちていたり、ググってみたものの分かりませんでした。


一応再生とストップはできるのですが、
他の二つのスクリプトがわかりませんでした。

スクリプトのヒントを頂けると幸いです。

宜しくお願いします。
ひろゆき
Åê¹ÆNo.46499
投稿日時: 2010-12-7 10:15
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: as3.0 でボリュームコントロールを作成したい
まず、使用環境を「アカウント編集」で記載しておきましょう。

次に、質問されている内容からは、ご自身でどこまでおできになり、どこでつまずいているのか不明確です。
なので、ヒント以上の回答はしづらいように思います。

すべてをコピー&ペーストで対応するのは、難しいように思いますが、サンプルを上げておきます。
ただし、スクリプトの意味等は、ご自分で理解されたうえで、お使いください。

MP3Player (1)」「MP3Player (2)


----------------
質問する際は、回答者に具体的な情報を与えてください。

tanakasan
Åê¹ÆNo.46502
投稿日時: 2010-12-7 12:33
新米
居住地:
投稿: 3
使用環境:
winVista (32bit)
Flash CS4・CS5
Flash Player 8.9.10
Re: as3.0 でボリュームコントロールを作成したい
> ちょんまげら様

初心者(初めて1週間程度)で使い方が全くわからずすみませんでした。
使用環境など整備しました。


スクリプトですが、停止ができると思ったら『再生ボタンの機能をなくすということ』しかできませんでした。

以下スクリプトです。



stop();

start_btn.buttonMode = true;

var bgm01:Sound = new BGM01();

start_btn.addEventListener(MouseEvent.CLICK, playBGM);

function playBGM(event:KeyboardEvent) {
bgm01.play();
}



よろしくお願いします。
ひろゆき
Åê¹ÆNo.46503
投稿日時: 2010-12-7 12:49
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: as3.0 でボリュームコントロールを作成したい
初心者なら、難しいことから取り組まず、基礎から学習すべきだと思いますが。

スクリプトです。と言われても、どこに何を配置して、どこにそのスクリプトを記述したか、
第三者が再現できるよう説明すべきでしょう。

それに、なぜ、KeyboardEventなのかよく分かりません。
stop();

start_btn.buttonMode = true;

var bgm01:Sound = new BGM01();

start_btn.addEventListener(MouseEvent.CLICK, playBGM);

function playBGM(event:MouseEvent):void {
	bgm01.play();
}

Soundクラスを使うのであれば、せめて、リファンレンスくらいは読みましょう。
Sound - ActionScript 3.0 言語およびコンポーネントリファレンス

「Soundクラス AS3」などでGoogle検索すれば、
基本的なことを分かり易く説明しているものも見つかりますね。

FlashゲームPG講座 For AS3.0【サウンドについて】
feb19.jp blog - AS3でSoundを制御する


「ちょんまげら」は名前ではありません。

それに、Flash4やFlash5では、AS3.0は使えないと思いますけど。


----------------
質問する際は、回答者に具体的な情報を与えてください。

tanakasan
Åê¹ÆNo.46505
投稿日時: 2010-12-7 13:44
新米
居住地:
投稿: 3
使用環境:
winVista (32bit)
Flash CS4・CS5
Flash Player 8.9.10
Re: as3.0 でボリュームコントロールを作成したい
ひろゆき様でした。申し訳ありません。

MouseEventの記述ミスです。

FlashはCS4・CS5です。


SoundChannelやSoundTransformを使っていくつの音を出すかか、
音量のパラメータなどを書いていくという事はわかっていたのですが、じゃあ実際どう書いていくのかというところが分からない状態でした。

基礎的な所に戻りたいと思います。

ご教授いただきありがとうございました。
ひろゆき
Åê¹ÆNo.46506
投稿日時: 2010-12-7 15:59
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: as3.0 でボリュームコントロールを作成したい
引用:
FlashはCS4・CS5です。

であれば、使用環境を書き直しておくべきでしょう。

引用:
音量によって(画像?が上下しているようなやつ。)

これが何を指すのか、全く分かりませんが...。
とりあえず、サンプルコードを上げておきます。

Main.as をドキュメントクラスとして設定。
////////////////////////////////////////////////////////////////////////////////
// SimpleController
////////////////////////////////////////////////////////////////////////////////

package {

	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.media.SoundTransform;

	public class Main extends Sprite {
		private var playBtn:Btn;
		private var pauseBtn:Btn;
		private var stopBtn:Btn;
		private var slider:Slider;
		private var sound:Sound;
		private var channel:SoundChannel;
		private var position:Number = 0;
		private var soundTrans:SoundTransform;
		private var volume:Number = 0.5;

		public function Main() {
			init();
		}

		private function init():void {
			playBtn = new Btn();
			addChild(playBtn);
			playBtn.init({label: "play"});
			playBtn.x = 60;
			playBtn.y = 20;
			playBtn.addEventListener(MouseEvent.CLICK, play, false, 0, true);
			pauseBtn = new Btn();
			addChild(pauseBtn);
			pauseBtn.init({label: "pause"});
			pauseBtn.x = 60;
			pauseBtn.y = 20;
			pauseBtn.visible = false;
			pauseBtn.addEventListener(MouseEvent.CLICK, pause, false, 0, true);
			stopBtn = new Btn();
			addChild(stopBtn);
			stopBtn.init({label: "stop"});
			stopBtn.x = 140;
			stopBtn.y = 20;
			stopBtn.enabled = false;
			stopBtn.addEventListener(MouseEvent.CLICK, stop, false, 0, true);
			slider = new Slider();
			addChild(slider);
			slider.init({label: "volume", init: volume*100});
			slider.x = 50;
			slider.y = 50;
			slider.addEventListener(CompoEvent.CHANGE, change, false, 0, true);
			sound = new BGM();
			soundTrans = new SoundTransform();
		}
		private function play(evt:MouseEvent):void {
			channel = sound.play(position);
			channel.addEventListener(Event.SOUND_COMPLETE, soundComplete, false, 0, true);
			setVolume(volume);
			playBtn.visible = false;
			pauseBtn.visible = true;
			stopBtn.enabled = true;
		}
		private function pause(evt:MouseEvent):void {
			if (channel) {
				position = channel.position;
				channel.stop();
			}
			playBtn.visible = true;
			pauseBtn.visible = false;
			stopBtn.enabled = false;
		}
		private function stop(evt:MouseEvent):void {
			if (channel) {
				position = 0;
				channel.stop();
			}
			playBtn.visible = true;
			pauseBtn.visible = false;
			stopBtn.enabled = false;
		}
		private function change(evt:CompoEvent):void {
			setVolume(evt.value/100);
		}
		private function setVolume(volume:Number):void {
			soundTrans.volume = volume;
			if (channel) channel.soundTransform = soundTrans;
		}
		private function soundComplete(evt:Event):void {
			position = 0;
			playBtn.visible = true;
			pauseBtn.visible = false;
			stopBtn.enabled = false;
		}
		
	}

}


//////////////////////////////////////////////////
// Btnクラス
//////////////////////////////////////////////////

import flash.display.Sprite;
import flash.display.Shape;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.text.AntiAliasType;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.filters.GlowFilter;
import flash.events.MouseEvent;

class Btn extends Sprite {
	public var id:uint;
	private var shade:Shape;
	private var bottom:Shape;
	private var light:Shape;
	private var base:Shape;
	private var txt:TextField;
	private var label:String = "";
	private static var fontType:String = "_ゴシック";
	private var _width:uint = 60;
	private static var _height:uint = 20;
	private static var corner:uint = 5;
	private var type:uint = 1;
	private static var bColor:uint = 0xFFFFFF;
	private static var sColor:uint = 0x000000;
	private static var upColor:uint = 0x666666;
	private static var overColor:uint = 0x333333;
	private static var offColor:uint = 0x999999;
	private static var gColor:uint = 0x0099FF;
	private var blueGlow:GlowFilter;
	private var shadeGlow:GlowFilter;
	private var _clicked:Boolean = false;
	private var _enabled:Boolean = true;

	public function Btn() {
	}

	public function init(option:Object):void {
		if (option.id != undefined) id = option.id;
		if (option.label != undefined) label = option.label;
		if (option.width != undefined) _width = option.width;
		if (option.type != undefined) type = option.type;
		draw();
	}
	private function draw():void {
		switch (type) {
		case 1 :
			bColor = 0xFFFFFF;
			sColor = 0x000000;
			upColor = 0x666666;
			overColor = 0x333333;
			offColor = 0x999999;
			break;
		case 2 :
			bColor = 0x000000;
			sColor = 0xFFFFFF;
			upColor = 0x666666;
			overColor = 0x999999;
			offColor = 0x333333;
			break;
		}
		blueGlow = new GlowFilter(gColor, 0.6, 5, 5, 2, 3, false, true);
		shadeGlow = new GlowFilter(sColor, 0.3, 4, 4, 2, 3, false, true);
		shade = new Shape();
		bottom = new Shape();
		light = new Shape();
		base = new Shape();
		txt = new TextField();
		addChild(shade);
		addChild(bottom);
		addChild(light);
		addChild(base);
		addChild(txt);
		createBase(shade, _width, _height, corner, sColor);
		shade.filters = [shadeGlow];
		createBase(bottom, _width, _height, corner, sColor, 0.3);
		createBase(light, _width, _height, corner, gColor);
		light.filters = [blueGlow];
		createBase(base, _width, _height, corner, bColor);
		txt.x = -_width*0.5;
		txt.y = -_height*0.5;
		txt.width = _width;
		txt.height = _height - 1;
		txt.type = TextFieldType.DYNAMIC;
		txt.selectable = false;
		//txt.embedFonts = true;
		//txt.antiAliasType = AntiAliasType.ADVANCED;
		var tf:TextFormat = new TextFormat();
		tf.font = fontType;
		tf.size = 12;
		tf.align = TextFormatAlign.CENTER;
		txt.defaultTextFormat = tf;
		txt.text = label;
		enabled = true;
		mouseChildren = false;
	}
	private function rollOver(evt:MouseEvent):void {
		_over();
	}
	private function rollOut(evt:MouseEvent):void {
		_up();
	}
	private function press(evt:MouseEvent):void {
		_down();
	}
	private function release(evt:MouseEvent):void {
		_up();
	}
	private function click(evt:MouseEvent):void {
	}
	private function _up():void {
		txt.y = -_height*0.5;
		txt.textColor = upColor;
		base.y = -1;
		light.visible = false;
		light.y = -1;
	}
	private function _over():void {
		txt.y = -_height*0.5;
		txt.textColor = overColor;
		base.y = -1;
		light.visible = true;
		light.y = -1;
	}
	private function _down():void {
		txt.y = -_height*0.5 + 1;
		txt.textColor = overColor;
		base.y = 0;
		light.visible = true;
		light.y = 0;
	}
	private function _off():void {
		txt.y = -_height*0.5 + 1;
		txt.textColor = offColor;
		base.y = 0;
		light.visible = false;
		light.y = 0;
	}
	public function get clicked():Boolean {
		return _clicked;
	}
	public function set clicked(param:Boolean):void {
		_clicked = param;
		enabled = !_clicked;
		if (_clicked) {
			_down();
		} else {
			_up();
		}
	}
	public function get enabled():Boolean {
		return _enabled;
	}
	public function set enabled(param:Boolean):void {
		_enabled = param;
		buttonMode = _enabled;
		mouseEnabled = _enabled;
		useHandCursor = _enabled;
		if (_enabled) {
			_up();
			addEventListener(MouseEvent.MOUSE_OVER, rollOver, false, 0, true);
			addEventListener(MouseEvent.MOUSE_OUT, rollOut, false, 0, true);
			addEventListener(MouseEvent.MOUSE_DOWN, press, false, 0, true);
			addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
			addEventListener(MouseEvent.CLICK, click, false, 0, true);
		} else {
			_off();
			removeEventListener(MouseEvent.MOUSE_OVER, rollOver);
			removeEventListener(MouseEvent.MOUSE_OUT, rollOut);
			removeEventListener(MouseEvent.MOUSE_DOWN, press);
			removeEventListener(MouseEvent.MOUSE_UP, release);
			removeEventListener(MouseEvent.CLICK, click);
		}
	}
	private function createBase(target:Shape, w:uint, h:uint, c:uint, color:uint, alpha:Number = 1):void {
		target.graphics.beginFill(color, alpha);
		target.graphics.drawRoundRect(-w*0.5, -h*0.5, w, h, c*2);
		target.graphics.endFill();
	}

}


//////////////////////////////////////////////////
// Sliderクラス
//////////////////////////////////////////////////

import flash.display.Sprite;
import flash.display.Shape;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.text.AntiAliasType;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.filters.DropShadowFilter;
import flash.filters.GlowFilter;
import flash.geom.Rectangle;
import flash.geom.Matrix;
import flash.display.GradientType;
import flash.display.SpreadMethod;
import flash.display.InterpolationMethod;
import flash.events.Event;
import flash.events.MouseEvent;

class Slider extends Sprite {
	private var hole:Shape;
	private var line:Sprite;
	private var thumb:Sprite;
	private var light:Shape;
	private var shade:Shape;
	private var base:Shape;
	private var title:TextField;
	private var txt:TextField;
	private var label:String = "";
	private static var fontType:String = "_ゴシック";
	private var _width:uint = 100;
	private static var tHeight:uint = 20;
	private static var bHeight:uint = 30;
	private var grid:uint = 5;
	private static var bColor:uint = 0xFFFFFF;
	private static var tColor:uint = 0x666666;
	private static var gColor:uint = 0x999999;
	private static var mColor:uint = 0x333333;
	private static var bgColor:uint = 0x0099FF;
	private static var sColor:uint = 0x000000;
	private static var offColor:uint = 0x999999;
	private var min:Number = 0;
	private var max:Number = 100;
	private var initValue:Number = 0;
	private var blueGlow:GlowFilter;
	private var shadeDrop:DropShadowFilter;
	private var value:Number;
	private var _enabled:Boolean = true;

	public function Slider() {
	}

	public function init(option:Object):void {
		if (option.label != undefined) label = option.label;
		if (option.width != undefined) _width = option.width;
		if (option.min != undefined) min = option.min;
		if (option.max != undefined) max = option.max;
		if (option.grid != undefined) grid = option.grid;
		if (option.init != undefined) initValue = option.init;
		draw();
	}
	private function draw():void {
		shadeDrop = new DropShadowFilter(1, 90, sColor, 0.5, 4, 4, 2, 3, false, false);
		blueGlow = new GlowFilter(bgColor, 0.6, 5, 5, 2, 3, false, true);
		hole = new Shape();
		line = new Sprite();
		title = new TextField();
		txt = new TextField();
		thumb = new Sprite();
		shade = new Shape();
		light = new Shape();
		base = new Shape();
		addChild(hole);
		addChild(line);
		addChild(title);
		addChild(txt);
		addChild(thumb);
		thumb.addChild(shade);
		thumb.addChild(light);
		thumb.addChild(base);
		hole.y = bHeight;
		createGradientHole(hole, _width, 3);
		line.y = bHeight;
		createGrid(line);
		title.height = tHeight-1;
		title.type = TextFieldType.DYNAMIC;
		title.selectable = false;
		//title.embedFonts = true;
		//title.antiAliasType = AntiAliasType.ADVANCED;
		title.textColor = tColor;
		title.autoSize = TextFieldAutoSize.LEFT;
		var tfl:TextFormat = new TextFormat();
		tfl.font = fontType;
		tfl.size = 12;
		tfl.align = TextFormatAlign.LEFT;
		title.defaultTextFormat = tfl;
		title.text = label;
		//txt.x = title.textWidth;
		txt.x = 50;
		txt.width = 50;
		txt.height = tHeight-1;
		txt.selectable = false;
		//txt.embedFonts = true;
		//txt.antiAliasType = AntiAliasType.ADVANCED;
		var tfr:TextFormat = new TextFormat();
		tfr.font = fontType;
		tfr.size = 12;
		tfr.align = TextFormatAlign.RIGHT;
		txt.defaultTextFormat = tfr;
		reset();
		thumb.y = bHeight;
		createThumb(shade, 8, 20, 12, sColor);
		shade.filters = [shadeDrop];
		createThumb(light, 8, 20, 12, bgColor);
		light.filters = [blueGlow];
		createThumb(base, 8, 20, 12, bColor);
		_up();
		enabled = true;
		thumb.mouseChildren = false;
	}
	private function rollOver(evt:MouseEvent):void {
		_over();
	}
	private function rollOut(evt:MouseEvent):void {
		_up();
	}
	private function press(evt:MouseEvent):void {
		_down();
		var rect:Rectangle = new Rectangle(0, bHeight, _width, 0);
		thumb.startDrag(false, rect);
		thumb.addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
		stage.addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
		stage.addEventListener(Event.MOUSE_LEAVE, leave, false, 0, true);
		thumb.addEventListener(Event.ENTER_FRAME, change, false, 0, true);
	}
	private function release(evt:MouseEvent):void {
		_up();
		thumb.stopDrag();
		checkValue();
		var e:CompoEvent = new CompoEvent(CompoEvent.SELECT, value);
		dispatchEvent(e);
		thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
		stage.removeEventListener(MouseEvent.MOUSE_UP, release);
		stage.removeEventListener(Event.MOUSE_LEAVE, leave);
		thumb.removeEventListener(Event.ENTER_FRAME, change);
	}
	private function leave(evt:Event):void {
		_up();
		thumb.stopDrag();
		checkValue();
		dispatchEvent(new CompoEvent(CompoEvent.SELECT, value));
		thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
		stage.removeEventListener(MouseEvent.MOUSE_UP, release);
		stage.removeEventListener(Event.MOUSE_LEAVE, leave);
		thumb.removeEventListener(Event.ENTER_FRAME, change);
	}
	private function _up():void {
		light.visible = false;
	}
	private function _over():void {
		light.visible = true;
	}
	private function _down():void {
		light.visible = true;
	}
	private function _off():void {
		light.visible = false;
		txt.textColor = offColor;
	}
	private function change(evt:Event):void {
		_down();
		checkValue();
		dispatchEvent(new CompoEvent(CompoEvent.CHANGE, value));
	}
	private function checkValue():void {
		value = min + Math.round(thumb.x/_width*(max-min));
		txt.text = String(value);
	}
	public function get enabled():Boolean {
		return _enabled;
	}
	public function set enabled(param:Boolean):void {
		_enabled = param;
		if (!_enabled) _off();
		thumb.buttonMode = _enabled;
		thumb.mouseEnabled = _enabled;
		thumb.useHandCursor = _enabled;
		if (_enabled) {
			thumb.addEventListener(MouseEvent.MOUSE_OVER, rollOver, false, 0, true);
			thumb.addEventListener(MouseEvent.MOUSE_OUT, rollOut, false, 0, true);
			thumb.addEventListener(MouseEvent.MOUSE_DOWN, press, false, 0, true);
			thumb.addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
		} else {
			thumb.removeEventListener(MouseEvent.MOUSE_OVER, rollOver);
			thumb.removeEventListener(MouseEvent.MOUSE_OUT, rollOut);
			thumb.removeEventListener(MouseEvent.MOUSE_DOWN, press);
			thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
		}
	}
	public function reset():void {
		thumb.x = _width*(initValue-min)/(max-min);
		value = initValue;
		txt.text = String(value);
	}
	private function createGrid(target:Sprite):void {
		for (var n:uint = 0; n <= grid; n++) {
			var w:uint = Math.floor(_width/grid);
			if (n == 0 || n == grid*0.5 || n == grid) {
				createGridLine(target, w*n, mColor);
				var _txt:TextField = new TextField();
				target.addChild(_txt);
				_txt.x = w*n - 20;
				_txt.y = 13;
				_txt.width = 40;
				_txt.height = 14;
				_txt.selectable = false;
				//_txt.embedFonts = true;
				//_txt.antiAliasType = AntiAliasType.ADVANCED;
				//_txt.antiAliasType = AntiAliasType.NORMAL;
				_txt.textColor = mColor;
				var tfc:TextFormat = new TextFormat();
				tfc.font = fontType;
				tfc.size = 8;
				tfc.align = TextFormatAlign.CENTER;
				_txt.defaultTextFormat = tfc;
				if (n == 0) _txt.text = String(min);
				if (n == grid*0.5) _txt.text = String(min+(max-min)*0.5);
				if (n == grid) _txt.text = String(max);
			} else {
				createGridLine(target, w*n, gColor);
			}
		}
	}
	private function createThumb(target:Shape, w:uint, h:uint, y:uint, color:uint, alpha:Number = 1):void {
		target.graphics.beginFill(color, alpha);
		target.graphics.drawRoundRect(-w*0.5, -y, w, h, w);
		target.graphics.endFill();
	}
	private function createGradientHole(target:Shape, w:uint, c:Number):void {
		var colors:Array = [0x000000, 0x000000];
		var alphas:Array = [0.4, 0];
		var ratios:Array = [0, 255];
		var matrix:Matrix = new Matrix();
		matrix.createGradientBox(w+c*2, c*2, 0.5*Math.PI, -c, -c);
		target.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, matrix, 
			SpreadMethod.PAD, InterpolationMethod.RGB, 0);
		target.graphics.drawRoundRect(-c, -c, w+c*2, c*2, c*2);
		target.graphics.endFill();
	}
	private function createGridLine(target:Sprite, x:uint, color:uint):void {
		target.graphics.lineStyle(0, color);
		target.graphics.moveTo(x, 8);
		target.graphics.lineTo(x, 12);
	}

}


//////////////////////////////////////////////////
// CompoEventクラス
//////////////////////////////////////////////////

import flash.events.Event;

class CompoEvent extends Event {
	public static const SELECT:String = "select";
	public static const CHANGE:String = "change";
	public var value:*;

	public function CompoEvent(type:String, value:*) {
		super(type);
		this.value = value;
	}

	override public function clone():Event {
		return new CompoEvent(type, value);
	}

}


----------------
質問する際は、回答者に具体的な情報を与えてください。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops