Flash Prp CC, Starlingでピクセル同士の衝突判定

Flash Prp CC, Starlingでピクセル同士の衝突判定

Flash Prp CC, Starlingでピクセル同士の衝突判定 : デモ

Flash Prp CC, Starlingでピクセル同士の衝突判定 : ZIPファイル(78kb)

1.Main.fla

1. Flashコンテンツのパフォーマンスをグラフ化するstatsをダウンロードします。

statsサイト(外部サイト):http://github.com/mrdoob/Hi-ReS-Stats

2. Flash Professional CC にダウンロードしたstatsファイルを以下のように、Flashメニューから設定します。

Flash – 環境設定 – コンパイラー – ソースパス で、Hi-ReS-Stats-master/src を設定します。

3. Starlingファイルをダウンロードします。

Starlingサイト(外部サイト):http://gamua.com/starling/

4. Flash Professional CC にダウンロードしたstarlingファイルを以下のように、Flashメニューから設定します。

Flash – 環境設定 – コンパイラー – ソースパス で、starling/src を設定します。

Flash – 環境設定 – コンパイラー – ライブラリパス で、starling/bin を設定します。

5. プロパティのクラスに「StartUp」を記述します。

6. ライブラリに画像を読み込む。

上部メニューから「ファイル – 読み込み – ライブラリに読み込み」で、ライブラリに表示する画像を読み込みます。

読み込んだライブラリの画像をクリックし、「ビットマッププロパティ」を表示します。

「ビットマッププロパティ」の「ActionScript」のタブをクリックし、「ActionScript用書き出し」をチェック。

クラス名は、最初の一文字目は大文字にし、任意に決めます。

ビットマッププロパティの設定

2.StartUp.as

プログラム言語は、ActionScript3.0です。

package
{
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import starling.core.Starling;
	import net.hires.debug.Stats;
	
	public class StartUp extends Sprite
	{
		private var mStarling:Starling;
		
		public function StartUp()
		{
			//fps計測用クラス
			addChild(new Stats());
			
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			//starlingインスタンスの作成
			mStarling = new Starling(HitTest, stage);//ピクセル同士の衝突判定
			
			//アンチエイリアスの設定 0:アンチなし、2:最小限のアンチエイリアス、4:高品質、6:最高品質
			mStarling.antiAliasing = 2;
			
			//スタート
			mStarling.start();
		}
	}
}

3.HitTest.as

//ピクセル同士の衝突
package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.geom.Point;
	
	import starling.display.Image;
	import starling.display.Sprite;
	import starling.events.Event;
	import starling.events.Touch;
	import starling.events.TouchEvent;
	import starling.events.TouchPhase;
	import starling.text.TextField;
	import starling.textures.Texture;
	
	public class HitTest extends Sprite
	{
		private var image1:Image;
		private var image2:Image;
		private var boyBitmap:Bitmap;
		private var point1:Point = new Point(0,0);
		private var point2:Point = new Point(0,0);
		
		//[Embed(source = "boy.png")]
		//private static const Boy:Class;
		
		private var text1:TextField;
		private var text:TextField;		
		
		//Flash IDEのライブラリ画像を使う場合
		private	var boyBitmapData:BitmapData = new Boy(0, 0);
		
		
		public function HitTest()
		{
			text1 = new TextField(300, 300, "ステージをクリック", "gothic", 15, 0x000);
			text = new TextField(300, 300, "タッチしていない", "gothic", 15, 0x000);
			addChild(text1);
			addChild(text);
			addEventListener(Event.ADDED_TO_STAGE, onAdded);
		}
		
		private function onAdded(e:Event):void
		{
			text1.x = -text1.width/2 + stage.stageWidth/2;
			text1.y = -120;
			
			text.x = -text.width/2 + stage.stageWidth/2;
			text.y = -70;
			
			boyBitmap = new Bitmap(boyBitmapData);
			var texture:Texture = Texture.fromBitmap(boyBitmap);
			
			image1 = new Image(texture);
			image1.x = Math.random() * stage.stageWidth;
			image1.y = Math.random() * stage.stageHeight;
			
			image2 = new Image(texture);
			image2.x = Math.random() * stage.stageWidth;
			image2.y = Math.random() * stage.stageHeight;
			
			addChild(image1);
			addChild(image2);
			
			stage.addEventListener(TouchEvent.TOUCH, onTouch);
			
			stage.addEventListener(Event.ENTER_FRAME, onFrame);
		}
		
		private function onTouch(e:TouchEvent):void
		{
			var touch:Touch = e.getTouch(stage);
			if(touch.phase == TouchPhase.ENDED)
			{
				image1.x = Math.random() * stage.stageWidth;
				image1.y = Math.random() * stage.stageHeight;
				
				image2.x = Math.random() * stage.stageWidth;
				image2.y = Math.random() * stage.stageHeight;
			}
		}
		
		private function onFrame(event:Event):void
		{
			point1.x = image1.x;
			point1.y = image1.y;
			point2.x = image2.x;
			point2.y = image2.y;
			
			//BitmapDataのhitTestAPI
			if (boyBitmap.bitmapData.hitTest(point2, 255, boyBitmap.bitmapData, point1, 255))
			{
				text.text = String("タッチした");
			}
			else
			{
				text.text = String("タッチしていない");
			}
		}
	}
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です