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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     Stageリサイズ時の背景MC拡大縮小するカスタムクラス作成
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hide33
Åê¹ÆNo.42780
投稿日時: 2009-7-2 23:30
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Stageリサイズ時の背景MC拡大縮小するカスタムクラス作成
こちらの投稿のスクリプトをクラスにしてみたいのですが、上手く動作しません。現在は下記の通りに記述しています。
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。と表示されます。ご教示宜しくお願い致します。

//** StageResize.as */
package {
	import flash.display.Stage;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.display.Sprite;
	import flash.display.MovieClip;
	
	public class StageResize extends MovieClip
	{
		private var target_mc:MovieClip;
		private var stageW:Number = stage.stageWidth;
		private var stageH:Number = stage.stageHeight;
		private var stageR:Number = target_mc.width / target_mc.height;
		
		public function StageResize()
		{
			this.stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			this.stage.addEventListener(Event.RESIZE, this.BgResize);
			this.BgResize(null);
		}
		
		public function BgResize()
		{
			target_mc = bg;
			bg.x = stageW / 2;
			bg.y = stageH / 2;
			
			if (stageW / stageH >= stageR) {
				bg.width = stageW;
				bg.scaleY = bg.scaleX;
			} else {
				bg.height = stageH;
				bg.scaleX = bg.scaleY;
			}
		}
	}
}


//** FlashCS3_FRAME1 */
var BG:StageResize = new StageResize();
addChild(BG);
野中文雄
Åê¹ÆNo.42781
投稿日時: 2009-7-3 0:15
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: Stageリサイズ時の背景MC拡大縮小するカスタムクラス作成
まず、スクリプトは正しく引用してください。メソッドBgResize()に引数がありませんし、メソッド本体で用いられている変数bgがどこからきたのか不明です。

つぎに、問題は単純化すべきです。
引用:
hide33さんは書きました:
こちらの投稿のスクリプトをクラスにしてみたいのですが、上手く動作しません。現在は下記の通りに記述しています。
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。と表示されます。ご教示宜しくお願い致します。

//** StageResize.as */
package {
	/*
	import flash.display.Stage;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.display.Sprite;
	*/
	import flash.display.MovieClip;

	public class StageResize extends MovieClip {
		// private var target_mc:MovieClip;
		private var stageW:Number = stage.stageWidth;
		private var stageH:Number = stage.stageHeight;
		// private var stageR:Number = target_mc.width / target_mc.height;

		public function StageResize() {
			trace(stage);
			/*
			this.stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			this.stage.addEventListener(Event.RESIZE, this.BgResize);
			this.BgResize(null);
			*/
		}
		/* 以下コメントアウト
		public function BgResize():void {


----------------
 

hide33
Åê¹ÆNo.42783
投稿日時: 2009-7-3 1:55
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Re: Stageリサイズ時の背景MC拡大縮小するカスタムクラス作成
野中さん、夜遅くに有り難う御座います。
仰るとおりスクリプトの引用が本投稿だけでは、かなり分かりづらくまたリンク先でも突然bg:MovieClipを記述しました。m(_ _)m

次に問題の単純化なのですが、ステージがリサイズされたら背景(ステージサイズ)のムービークリップがそれに伴い拡大・縮小する動作を実装したいのですが、このブラウザリサイズと背景の拡大・縮小を切り離して2つのファイルに分割したほうが良いのか?滅茶苦茶な記述ですが、現在のリサイズされたら、背景もリサイズするというカスタムクラスを1つ作成したほうが良いのか頭の中で色々と考えているのですが、後者を変更記述する方法がよいのではないかと考慮中です。

野中さんの著作物等(FlashOOP for AS3.0)でペンギンを水平移動させたり、回転させたりとスクリプトを分割なさっているのも参考にしていますが、現状では解決方法の検討がついていませんが、問題の単純化を念頭に置いて頑張ってみます。(下記リンクされている書籍も買おうっと!)
hide33
Åê¹ÆNo.42796
投稿日時: 2009-7-3 23:23
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Re: Stageリサイズ時の背景MC拡大縮小するカスタムクラス作成
お世話になります。
今、野中さんのご指摘通りの下記コードまで単純化していますが、trace出力できません。
読込元の.flaファイルにStageResize();や
var BG:StageResize = new StageResize();
addChild(BG);など記載していますが、stageのインスタンスを作成できるのかどうか、stageの概念が色んな文献を読んでいますが理解できません。下記コードを実行すると、コンパイルされたswfが表示されウインドウをリサイズするとstageに関する事柄がtrace出力されるものだと理解していますが、それさえあっているのかもう訳が分からなくなっています。
package {
	import flash.display.MovieClip;

	public class StageResize extends MovieClip {
		private var stageW:Number = stage.stageWidth;
		private var stageH:Number = stage.stageHeight;

		public function StageResize() {
			trace(stage);
		}
         }
}


野中文雄
Åê¹ÆNo.42797
投稿日時: 2009-7-3 23:42
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: Stageリサイズ時の背景MC拡大縮小するカスタムクラス作成
さらに、もう一歩単純化する必要があるということです(なぜstageを強調したのかがヒントです)。

参考: gihyo.jp「MovieClipシンボルにクラスを定義する
引用:
hide33さんは書きました:
今、野中さんのご指摘通りの下記コードまで単純化していますが、trace出力できません。
...[中略]...
package {
	import flash.display.MovieClip;

	public class StageResize extends MovieClip {
		private var stageW:Number = stage.stageWidth;
		private var stageH:Number = stage.stageHeight;

		public function StageResize() {
			trace(stage);
		}
         }
}


----------------
 

hide33
Åê¹ÆNo.42800
投稿日時: 2009-7-4 21:59
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Re: Stageリサイズ時の背景MC拡大縮小するカスタムクラス作成
野中さん、早急なご回答で且つ参考サイトまでどうも有り難う御座います。
コメントアウトを記載していただいたコードを見たときに、trace(stage)がスグに引っかかりましたし、どこがで扱いがAS3から変更されているのは分かっていたので、今回基礎的な部分でしょうからものにしておきたいと思います。(結構gihyo.jpは為になりますね?。少し冗長な表現があるときもありますが、野中さんの3Dペンギンにブラー効果も掛けてみます。)取り敢えずお礼まで。またご報告します。
hide33
Åê¹ÆNo.42811
投稿日時: 2009-7-6 20:37
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Re: Stageリサイズ時の背景MC拡大縮小するカスタムクラス作成
現在外部のASファイルが下記の状態で、引数が2足りませんと表示されています。
package
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.geom.Point;

	public class StageResize extends MovieClip
	{
		private var stageW:Number ;
		private var stageH:Number ;
		private var stageR:Number = width / height;
		private var bgBaseX:Number;
		private var bgBaseY:Number;
		private var bgPointX:Number;
		private var bgPointY:Number;
		
		public function StageResize(bgBase:Point, bgPoint:Point) {
			bgBaseX = bgBase.x;
			bgBaseY = bgBase.y;
			bgPointX = bgPoint.x;
			bgPointY = bgPoint.y;
			
			addEventListener(Event.RESIZE, resizehandler);
		}
		
		private function resizehandler(eventObject:Event):void{
			stageW = bgPointX - bgBaseX;
			stageH = bgPointY - bgBaseY;
			
			if (stageW / stageH >= stageR) {
				width = stageW;
				scaleY = scaleX;
			} else {
				height = stageH;
				scaleX = scaleY;
			}
		}
	}
}


Flash(SWF)の1フレーム目ムービークリップのリンケージにStageResizeを記載しています。
var bgBase:Point = new Point(0, 0);
var bgPoint:Point = new Point(stage.stageWidth, stage.stageHeight);
var bg:StageResize = new StageResize(bgBase, bgPoint);
addChild(bg);

ご教示頂いた参考サイトを見て、Pointで2点間の距離を出して、幅と高さに変更する方向で彷徨しています。もう少しな感じですが、方向性を誤っていっているような気もします。良きアドバイス宜しくお願い申し上げます。
hide33
Åê¹ÆNo.42871
投稿日時: 2009-7-9 23:10
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Re: Stageリサイズ時の背景MC拡大縮小するカスタムクラス作成
フレームアクションでは、正常に動作しているので、少し時間をかけて勉強したいと思います。Stageに直接アクセスできないようなので、野中さんの参考サイトを拝見してPointを設定しているのですが、解決していませんが私はデザインで背景を拡大縮小するサイトをよく作成するのでいずれ外部クラスにしていきたいと思います。どうも有り難う御座いました。AS3結構敷居が高いです。
ひろゆき
Åê¹ÆNo.42873
投稿日時: 2009-7-9 23:22
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: Stageリサイズ時の背景MC拡大縮小するカスタムクラス作成
引用:
hide33さんは書きました:
もう少しな感じですが、方向性を誤っていっているような気もします。良きアドバイス宜しくお願い申し上げます。

Event.ADDED_TO_STAGE あたりを調べてみては?


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

野中文雄
Åê¹ÆNo.42875
投稿日時: 2009-7-9 23:46
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: Stageリサイズ時の背景MC拡大縮小するカスタムクラス作成
やり方は、いくつか考えられます。「classからrootの変数へアクセスしたい」も参考になるかもしれません。


----------------
 

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

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