[AS3] Function.call()でシーン遷移



この前、ミニゲーム集みたいなのを作る機会があって、
要求された仕様で、
・1つのswf内に複数のミニゲームを入れる。
・1つのミニゲームが終わったら、別のミニゲームがはじまる。
ってことをしないといけませんでした。
そのやり方(シーン遷移)メモ。

登場人物

まず、用意した2つのクラスについて説明します。

Mainクラス

Spriteを継承している。表示はされない。
表示するSceneを管理する人。

Sceneクラス

Spriteを継承している。表示される人。
Sceneが終わったことをMainにお知らせして、表示するSceneを切り替えることを要求する。
(今回の案件ではミニゲームに相当)

やりたいこと

Sceneがはじまるとき

Sceneがおわったとき

以上!

デモ

wonderflに投稿したやつ。クリックで表示するSceneを切り替える。

シーン遷移(?) - wonderfl build flash online

ソースコード

Actionscript:
  1. //Mainクラス
  2. package
  3. {
  4.     import flash.display.Sprite;
  5.     import flash.events.Event;
  6.    
  7.     public class Main extends Sprite
  8.     {
  9.        
  10.         public function Main():void {
  11.             changeScene();
  12.         }
  13.        
  14.         private function changeScene():void {
  15.             var scene:Scene = new Scene(changeScene, 0xFFFFFF * Math.random());
  16.             addChild(scene);
  17.         }
  18.     }
  19.    
  20. }
  21.  
  22. //Sceneクラス
  23. import flash.display.Sprite;
  24. import flash.events.MouseEvent;
  25.  
  26. class Scene extends Sprite {
  27.     private var finishScene:Function;
  28.    
  29.     public function Scene(f:Function, c:uint):void {
  30.         finishScene = f;
  31.         graphics.beginFill(c);
  32.         graphics.drawRect(0, 0, 465, 465);
  33.         graphics.endFill();
  34.        
  35.         addEventListener(MouseEvent.CLICK, onClick);
  36.     }
  37.    
  38.     private function onClick(e:MouseEvent):void {
  39.         removeEventListener(MouseEvent.CLICK, onClick);
  40.         parent.removeChild(this);
  41.         finishScene.call(this);
  42.         finishScene = null;
  43.     }
  44. }

ポイント

SceneのonClickの中がポイント

finishScene.call(this);

MainのchangeSceneを呼び出して、シーンの切り替えを要求している。
くわしくは、こちら↓
Function - ActionScript 3.0 コンポーネントリファレンスガイド

parent.removeChild(this);

SceneをMainからremoveChildする。

Submit a Comment