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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     ゆったりとゆれるような動き
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kurosuke
Åê¹ÆNo.45650
投稿日時: 2010-9-6 16:42
新米
居住地:
投稿: 17
使用環境:
WindowsXP:SP3
FlashCS4 Professional
ActionScript3.0
ゆったりとゆれるような動き
ブンブンです。

mouseX,mouseYの値を取得して、斜め上,下にゆれるような画像があります。

このmouseX,mouseYの値をランダムに設定して同じような動作をすることは出来ないでしょうか。

試しに
private function enterFrame(event:Event):void
{
//var dx:Number = (stage.stageWidth / 2 - mouseX);
//var dy:Number = (stage.stageHeight / 2 - mouseY);

var dx:Number=(stage.stageWidth / 2 - Math.random()*250);
var dy:Number= (stage.stageHeight / 2 - Math.random()*50);


rotationHAndler(dx, dy);

}

private function rotationHAndler(dx:Number,dy:Number):void
{
if(!filter || !imageLoader.content || !mapLoader.content)
return;

var basetween:ITween;


//basetweenの設定
basetween=BetweenAS3.delay(BetweenAS3.func(function():void {
imageContainer.rotationX -= (imageContainer.rotationX + dy / 15) / 10;
imageContainer.rotationY -= (imageContainer.rotationY - dx / 15) / 10;
}
),0.5
);
basetween.play();

basetween.addEventListener(TweenEvent.COMPLETE, removeHandler);


shader.data.dx.value = [imageContainer.rotationY * 0.6];
shader.data.dy.value = [-imageContainer.rotationX * 0.6];
imageLoader.filters = [filter];
}
private function removeHandler(e:TweenEvent):void
{
e.target.removeEventListener(TweenEvent.COMPLETE, removeHandler);
}
"imports"などは設定しているものとする。
とrotationX Yの部分をMath.random()に変更してみました。
が、画像が振動したような動きになってしまいます。

ゆったりとゆれるような動きにしたいのですが、何か良い方法がありませんでしょうか。

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

Flash Professional CS4/CS6/CC

Safari 6.1
Re: ゆったりとゆれるような動き
これはドキュメントクラスか、クラスに記載していますよね?
であれば、端折らずに掲載した方がよいのでは?

なお、スクリプトは[code][/code]で囲むようにしましょう。


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

kurosuke
Åê¹ÆNo.45666
投稿日時: 2010-9-7 9:07
新米
居住地:
投稿: 17
使用環境:
WindowsXP:SP3
FlashCS4 Professional
ActionScript3.0
Re: ゆったりとゆれるような動き
失礼しました。

http://wonderfl.net/c/50I3
コードが長くなるのと、こちらのコードに若干手を加えたので、載せてはいけないのかなと思いました。



package 
{
  import fl.motion.ITween;
    import flash.display.Bitmap;
  import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.Shader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.BitmapFilterQuality;
    import flash.filters.BlurFilter;
    import flash.filters.ShaderFilter;
    import flash.geom.Point;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.system.LoaderContext;
    import flash.utils.ByteArray;
	
  import org.libspark.betweenas3.BetweenAS3;
  import org.libspark.betweenas3.easing.*;
  import org.libspark.betweenas3.tweens.*;
  import org.libspark.betweenas3.events.TweenEvent;
	
    
    public class Button extends Sprite
    {
        private var sourcePath:String = "photo/";
        private var index:int = -1;
        private var sources:Array = [
			 {image:"watariganibutton1.jpg", map:"watariganibutton_bump1.jpg" }
			]
        
        private var shaderLoader:URLLoader = new URLLoader();
        private var shaderURL:String = "photo/displacementMap.pbj";
        private var shader:Shader;
        private var filter:ShaderFilter;
		private var imageLoader:Loader = new Loader();
        private var imageLegend:Bitmap = new Bitmap();
        
        private var mapLoader:Loader = new Loader();
        private var mapLegend:Bitmap = new Bitmap();
        private var imageContainer:Sprite = new Sprite();
        private var shape:Sprite = new Sprite();
	private var dx:Number;
	private var dy:Number;
		
		        
        public function Button():void
        {
   	  addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
			
            shaderLoader.dataFormat = URLLoaderDataFormat.BINARY;
            shaderLoader.load(new URLRequest(shaderURL));
            shaderLoader.addEventListener(Event.COMPLETE, shaderComplete);
            
            addEventListener(Event.ENTER_FRAME, enterFrame);
		
	  changeSource();				
        }
		
	private function onAddedToStage(e:Event):void 
	{
	  removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
			
	  imageContainer.x = stage.stageWidth / 2;
            imageContainer.y = stage.stageHeight / 2;
            addChild(imageContainer);
            
            shape.graphics.beginFill(0, 0);
            shape.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
            shape.graphics.endFill();
            addChild(shape);
	}
        
        private function changeSource(... rest):void
        {
            index = index + 1 >= sources.length ? 0 : index + 1;
            var source:Object = sources[index];           
            var type:String = Event.COMPLETE;
            var context:LoaderContext = new LoaderContext(true);
            
            if(imageLoader)
                imageLoader.unload();
            
            var imageRequest:URLRequest = new URLRequest(sourcePath + source.image);
            imageLoader.load(imageRequest, context);
            imageLoader.contentLoaderInfo.addEventListener(type, imageComplete);
            imageContainer.addChild(imageLoader);
            
            if(mapLoader)
                mapLoader.unload();
            
            var mapRequest:URLRequest = new URLRequest(sourcePath + source.map);
            mapLoader.load(mapRequest, context);
            mapLoader.contentLoaderInfo.addEventListener(type, mapComplete);
        }
        
        private function shaderComplete(event:Event):void
        {
            var loader:URLLoader = URLLoader(event.currentTarget);
            shader = new Shader(loader.data as ByteArray);
            filter = new ShaderFilter(shader);
            testComplete();
        }
        
        private function imageComplete(event:Event):void
        {
            imageLoader.x = -imageLoader.width / 2;
            imageLoader.y = -imageLoader.height / 2;
            testComplete();
            
            var image:Bitmap = Bitmap(imageLoader.content)
            imageLegend.bitmapData = image.bitmapData.clone();
            imageLegend.width = 100;
            imageLegend.height = imageLegend.bitmapData.height
                * imageLegend.width / imageLegend.bitmapData.width;
				
        }
        
        private function mapComplete(event:Event):void
        {
            testComplete();
            
            var map:Bitmap = Bitmap(mapLoader.content)
            mapLegend.bitmapData = map.bitmapData.clone();
            mapLegend.width = 100;
            mapLegend.height = mapLegend.bitmapData.height 
                * mapLegend.width / mapLegend.bitmapData.width;
            mapLegend.x = stage.stageWidth - mapLegend.width;
		
        }
        
        private function testComplete():void
        {
            if(!filter || !imageLoader.content || !mapLoader.content)
                return;
                
            var map:BitmapData = Bitmap(mapLoader.content).bitmapData;
            var image:BitmapData = Bitmap(imageLoader.content).bitmapData;
            var fader:BitmapData = new BitmapData(image.width, image.height, true, 0);
            fader.draw(image);
            fader.applyFilter(fader, fader.rect, new Point(), 
                new BlurFilter(5, 5, BitmapFilterQuality.HIGH));
            
            shader.data.map.input = map;
        }
        
	//EnterFrame
        private function enterFrame(event:Event):void
        {		
	  var	dx:Number=(stage.stageWidth / 2 - Math.random()*250);
	  var	dy:Number= (stage.stageHeight / 2 - Math.random()*50); 
							
	  rotationHAndler(dx, dy);		
			
	}
		
	private function rotationHAndler(dx:Number,dy:Number):void 
	{
            if(!filter || !imageLoader.content || !mapLoader.content)
                return;
            		
			
	  var basetween:ITween; 

	//basetweenの設定
	 basetween=BetweenAS3.delay(BetweenAS3.func(function():void {
		  imageContainer.rotationX -= (imageContainer.rotationX + dy / 15) / 10;
  		  imageContainer.rotationY -= (imageContainer.rotationY - dx / 15) / 10;		
			}
			),0.5
			);
		  basetween.play();
					
	 	  basetween.addEventListener(TweenEvent.COMPLETE, removeHandler);
					
			
            shader.data.dx.value = [imageContainer.rotationY * 0.6];
            shader.data.dy.value = [-imageContainer.rotationX * 0.6];
            imageLoader.filters = [filter];
        }
	private function removeHandler(e:TweenEvent):void 
	{
	  e.target.removeEventListener(TweenEvent.COMPLETE, removeHandler);
	}
		
    }
	
}


簡単に出来そうでうまく出来ないのです。
Timerイベントなどが必要なのでしょうか。

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

Flash Professional CS4/CS6/CC

Safari 6.1
Re: ゆったりとゆれるような動き
引用:
kurosukeさんは書きました:
失礼しました。

http://wonderfl.net/c/50I3
コードが長くなるのと、こちらのコードに若干手を加えたので、載せてはいけないのかなと思いました。

であれば、wonderflでforkして、wonderflで質問された方がトラブルもなくてよろしいかと。


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

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

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