外部クラス "レベル"で作成された "DiamondEnemy"オブジェクトに問題があります。ステージに表示されません。私は間隔で "EnemyNotReleasedArray"からランダムな敵を取得し、 "enemyOnScreen"スプライトを通してそれらを画面に追加しようとしています。Addchild - 外部クラスのステージにオブジェクトが表示されない
すべての機能が100%完了していないことに注意してください。それは少し変わったように見えるかもしれません。私は実際にそれを働かせるまで、さらに進んでいきたいと思います。
update:私は別のドキュメントクラス "main"から新しい "レベル"オブジェクトを作成します。
package {
import DiamondEnemy;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.display.Sprite;
import flash.display.MovieClip;
public class Level extends MovieClip {
private const START_DELAY_SECONDS:uint = 1000;
private var EnemyNotReleasedArray:Array = new Array();
private var startDelay:Timer;
private var enemyOnScreen: Sprite;
public function Level(NumberDiamonds:uint)
{
// load the required enemies into the array
loadEnemyArray(NumberDiamonds);
//setup up sprite, for enemies that will appear on the screen
enemyOnScreen = new Sprite();
addChildAt(enemyOnScreen, numChildren);
// create delay timer before enemies can start appearing on screen
startDelay = new Timer(START_DELAY_SECONDS,1);
// set eventlistener that once delay finishes
startDelay.addEventListener(TimerEvent.TIMER_COMPLETE, releaseRandomEnemy);
startDelay.start();
//setup up sprite, for enemies that will appear on the screen
enemyOnScreen = new Sprite();
addChild(enemyOnScreen);
}
// creates the requested number of enemies type into EnemyNotReleasedArray so they can be released later
private function loadEnemyArray(numDiamonds:uint)
{
// use requested number diamonds enemies - to create diamond enemy objects
for (var i:uint = 0; i < numDiamonds; i++)
{
var diamond:DiamondEnemy = new DiamondEnemy();
EnemyNotReleasedArray.push(diamond);
}
}
// selects a random enemy from EnemyNotReleasedArray and resizes the array so enemy is no longer in it
private function releaseRandomEnemy(evt:TimerEvent)
{
var arrayLength:uint = EnemyNotReleasedArray.length;
// check make sure array is not empty, if empy level is over
if (arrayLength > 0)
{
var randomArrayIndex = Math.ceil(Math.random() * arrayLength) -1;
/// adding random enemy to sprite object
enemyOnScreen.addChild(EnemyNotReleasedArray[randomArrayIndex]);
trace(EnemyNotReleasedArray[randomArrayIndex]);
//remove the enemy from array and make element null
EnemyNotReleasedArray.removeAt(randomArrayIndex)
//tempory array to store non-null values
var tempArray:Array = new Array();
// cycle through EnemyNotReleasedArray and store all values that are not null into temp array
for each(var enemy in EnemyNotReleasedArray)
{
if (enemy != null)
{
tempArray.push(enemy)
}
}
// save temp array value into EnemyNotReleasedArray
EnemyNotReleasedArray = tempArray;
}
else
{
trace("no more enemies left in array");
}
}
}
}
ドキュメントクラス "メイン":
package {
import Level;
import DiamondEnemy;
import flash.display.MovieClip;
public class Main extends MovieClip
{
public function Main()
{
var level:Level = new Level(1);
}
}
}
このクラスをどのように使用しますか?これはあなたのドキュメントクラスですか?または、ドキュメントクラスがそのクラスをインスタンス化しますか? – null
私は "レベル"オブジェクトを作成する "メイン"と呼ばれる別のドキュメントクラスを持っています。レベルオブジェクトをどこから作成するかは重要ですか?たとえば、タイムラインまたはドキュメントクラスのいずれか? – niroice
更新していただきありがとうございますが、 'Level'オブジェクトを扱うドキュメントクラスに完全なコードを表示できますか?あなたの質問を編集し、コードを記入してください。ドキュメントクラスがあまりにも長すぎない場合は、コード全体を単に投稿して、望ましくない動作の原因となる重要な部分がないようにしてください。 – null