0

だから私は AS3 の初心者で、スマートフォン用のシンプルなビデオゲームを作ろうとしています。そして、この問題にぶつかるまではすべて順調に進んでいました。タイムラインからオブジェクトを問題なく使用および操作していましたが、突然何を試しても1046が表示されました.

エラーが発生するコードを次に示します。

mp = new MP_00();

そして、私はこれを持っています:

import flash.display.MovieClip;
var mp:Movieclip;

そして最後にこれ:

function mapMove(){
mp.y = mp.y - playerSpeed;
}

私は常に解決策を探していますが、誰も同じ問題を抱えているようには見えません。私は AS リンケージを MP_00 に設定しており、オブジェクトを入れようとしてもうまくいきません。オブジェクトは以前と同じように配置されていますが、機能します。

たとえば、私はこれを持っています

var player:MovieClip;

player = new Player();

AS Linkage が Player に設定されている場合、それは機能します。

これはすべて Flash Professional cs6 で行われます

EDIT 1 完全なコード 多くのものがプレースホルダーであるか、完成していないコードであることに注意してください。

このコードでは、同じオブジェクトに対してエラーが 2 回発生します

Scene 1 1046: Type was not found or was not a compile-time constant:
MP_00. 
Scene 1, Layer 'Actions', Frame 1, Line 165 1046: Type was not
found or was not a compile-time constant: MP_00.

それがエラーです。

import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.engine.SpaceJustifier;
import flashx.textLayout.operations.MoveChildrenOperation;

/*----------------------------Main VARs-----------------------------*/
var STATE_START:String="STATE_START";
var STATE_START_PLAYER:String="STATE_START_PLAYER";
var STATE_PLAY:String="STATE_PLAY";
var STATE_END:String="STATE_END";
var gameState:String;

var player:MovieClip;
var playerSpeed:Number;
var map:Array;
var bullets:Array;
//holds civil vehicles
var civil:Array; 
//holds enemy vehicles
var enemy:Array; 
var explosions:Array;

var BBullet:MovieClip;

//maps
var mp:MovieClip;
/*
var MP_01:MovieClip;
var MP_02:MovieClip;
var MP_03:MovieClip; 
*/

//sets the bullet type and properties
var BType = "BBasic";
var BProp:Array;

//bullet preperties by type

var BBasic:Array = new Array(1, 1, 100, 50, 0, new BBasicA());

/**
ARRAY SETTING
0 = bullet position (middle , back, sides etc...)
    1-middle front
    2-left side front
    3-right side front
    4-left and right side middle
    5-back
    7-left and right side wheels

1 = bullet direction
    1-forward
    2-back
    3-sides

2 = fire speed (in millisecounds so 1000 = 1sec)

3 = speed of movement

4 = damage 10-100

5 = name of the firing animation in library

6 = name of launch animation in library

7 = name of impact animation in library 
**/

var level:Number;

//BCivil speed and randomness
var BCSpeed:Number = 3;
var BCRand:Number = 120;

/*------------------------------Setup-------------------------------*/


introScreen.visible = false;
loadingScreen.visible = false;
gameScreen.visible = false;
endScreen.visible = false;

//map visibility
//MpRSimple.visible = false;

/*---------------------------Intro screen--------------------------*/


/*-----------------------------mainScreen---------------------------*/

mainScreen.play_btn.addEventListener(MouseEvent.CLICK, clickAway);
function clickAway(event:MouseEvent):void
{
    gameStart();
    }

function gameStart():void
{
    //Move main screen from stage
    mainScreen.visible = false;

    //Begin loading the game
    loadingScreen.visible = true;
    gameState = STATE_START;
    trace (gameState);
    addEventListener(Event.ENTER_FRAME, gameLoop);
    }

/*----------------------------gameLoop-----------------------------*/

function gameLoop(e:Event):void
{
    switch(gameState)
    {
        case STATE_START:
            startGame();
            break;

        case STATE_START_PLAYER:
            startPlayer();
            break;

        case STATE_PLAY:
            playGame();
            break;

        case STATE_END:
            endGame();
            break;

        }
    }
/*-_________________________-Game STATES-_________________________-*/

/*---------------------------STATE_START---------------------------*/

function startGame():void
{

    level = 1; //setting level for enemies

    //Graphics
        //player icon
    player = new Player(); 
        //add bullet holder
    bullets = new Array();
        //basicCivil icon
    civil = new Array(); 
        //basicEnemy icon
    enemy = new Array(); 
        //holds explosions
    explosions = new Array(); 

    //map
    //mp = new MP_00();
    //var mp:MP_00 = new MP_00();

    //Load map parts

    //End startGame
    gameState = STATE_START_PLAYER;
    trace(gameState);
    }

/*------------------------STATE_START_PLAYER-----------------------*/

function startPlayer():void
{
    //start the player

    //set possition of player
    player.y = stage.stageHeight - player.height;
    addChild(player);
    addEventListener(Event.ENTER_FRAME, movePlayer);

    //changing screens
    gameScreen.visible = true;

    //start game
    gameState = STATE_PLAY;
    trace(gameState);

    }

//player controll
function movePlayer(e:Event):void 
{

    //gameScreen.visible = true;

    //mouse\touch recognition
    player.x = stage.mouseX;
    player.y = stage.mouseY;

    //player does not move out of the stage
    if (player.x < 0)
    {
        player.x = 0;
    }
    else if (player.x > (stage.stageWidth - player.width))
    {
        player.x = stage.stageWidth + player.width;
    }

    }

//setting bullet type
if (BType == "BBasic")
{
        BProp = BBasic;
    /*case BMissile;
        BProp = BMissile;
        break; */
    }
//creating bullets


//gameScreen.fire_btn.addEventListener(MouseEvent.CLICK, fireHandler());


/*
function fireHandler():void
{
    var bulletTimer:Timer = new Timer (500);
    bulletTimer.addEventListener(TimerEvent.TIMER, timerListener);
    bulletTimer.start();
    trace("nja");
    }

function timerListener(e:TimerEvent):void
{
    //need and if statement to determine the bullet speed and travel depended on type of bullet
    var tempBullet:MovieClip = /*BProp[5] new BBasicA();
    //shoots bullets in the middle
    tempBullet.x = player.x +(player.width/2); 
    tempBullet.y = player.y;
    //shooting speed
    tempBullet.speed = 10; 
    bullets.push(tempBullet);
    addChild(tempBullet);
    //bullets movement forward
    for(var i=bullets.length-1; i>=0; i--)
    {
        tempBullet = bullets[i];
        tempBullet.y -= tempBullet.speed;
        }
    }
*/

/*----------------------------STATE_PLAY---------------------------*/

function playGame():void
{
    //gameplay
    //speedUp();
    mapMove();
    //fire();
    makeBCivil();
    makeBEnemy();
    moveBCivil();
    moveBEnemy();
    vhDrops();
    testCollision();
    testForEnd();
    removeExEplosions();
    }


function mapMove(){
    mp.y = mp.y - playerSpeed;
    }

/*
function speedUp():void
{
    var f:Number;
    for (f<10; f++;)
    {
        var playerSpeed = playerSpeed + 1;
        f = 0;
        //mapMove();
        MpRSimple = new MP_RS();
        MpRSimple.y = MpRSimple.y - playerSpeed;
        trace ("speed reset");
        }
    trace (f);
    }
*/

function makeBCivil():void
{
    //random chance
    var chance:Number = Math.floor(Math.random()*BCRand);
    if (chance <= 1 + level) 
    {
        var tempBCivil:MovieClip;
        //generate enemies
        tempBCivil = new BCivil();
        tempBCivil.speed = BCSpeed;
        tempBCivil.x = Math.round(Math.random()*800);

        addChild(tempBCivil);
        civil.push(tempBCivil);
        }
    }

function moveBCivil():void
{
    //move enemies
    var tempBCivil:MovieClip;
    for(var i:int = civil.length-1; i>=0; i--)
    {
        tempBCivil = civil[i];
        tempBCivil.y += tempBCivil.speed
        }

    //testion colision with the player and screen out
    if (tempBCivil.y > stage.stageHeight /* || tempBCivil.hitTestObject(player) */)
    {
        trace("ds hit");
        //makeExplosion (player.x, player.y);
        removeCivil(i);
        //gameState = STATE_END;
        }
    }

//Test bullet colision
function testCollision():void
{
    var tempBCivil:MovieClip;
    var tempBEnemy:MovieClip;
    var tempBullet:MovieClip;

    //civil/bullet colision
    civils:for(var i:int=civil.length-1; i>=0; i--)
    {
        tempBCivil = civil[i];
        for (var j:int=bullets.length-1; j>=0; j--)
        {
            tempBullet = bullets[j];
            if (tempBCivil.hitTestObject(tempBullet))
            {
                trace("laser hit the civil");
                makeExplosion (tempBCivil.x, tempBCivil.y);
                removeCivil(i);
                removeBullet(j);
                break civils;
                }
            }
        }

    //enemy/bullet colision
    enemy:for(var k:int=enemy.length-1; k>=0; k--)
    {
        tempBEnemy = enemy[k];
        for (var l:int=bullets.length-1; l>=0; l--)
        {
            tempBullet = bullets[l];
            if (tempBEnemy.hitTestObject(tempBullet))
            {
                trace("bullet hit the Enemy");
                makeExplosion (tempBEnemy.x, tempBEnemy.y);
                removeEnemy(k);
                removeBullet(l);
                break enemy;
                }
            }
        }
    }

function makeExplosion(ex:Number, ey:Number):void
{
    var tempExplosion:MovieClip;
    tempExplosion = new boom();
    tempExplosion.x = ex;
    tempExplosion.y = ey;
    addChild(tempExplosion)
    explosions.push(tempExplosion);
    }

function makeBEnemy():void
{
    //random chance
    var chance:Number = Math.floor(Math.random()*BCRand);
    if (chance <= 1 + level) 
    {
        var tempBEnemy:MovieClip;
        //generate enemies
        tempBEnemy = new BEnemy();
        tempBEnemy.speed = BCSpeed;
        tempBEnemy.x = Math.round(Math.random()*800);

        addChild(tempBEnemy);
        enemy.push(tempBEnemy);
        }

    }

function moveBEnemy():void
{
    //move enemies
    var tempBEnemy:MovieClip;
    for(var i:int = enemy.length-1; i>=0; i--)
    {
        tempBEnemy = enemy[i];
        tempBEnemy.y += tempBEnemy.speed
        }

    //testion colision with the player and screen out
    if (tempBEnemy.y > stage.stageHeight /* || tempBCivil.hitTestObject(player) */)
    {
        trace("enemy");
        //makeExplosion (player.x, player.y);
        removeEnemy(i);
        //gameState = STATE_END;
        }
    }

function vhDrops():void
{}

function testForEnd():void
{
    //check damage


    //end game
    //gameState = STATE_END;
    trace(gameState);
    }

/*--------------------REMOVING BS FROM STAGE-----------------------*/
//removing civils
function removeCivil(idx:int):void 
{
    if(idx >= 0)
    {
        removeChild(civil[idx]);
        civil.splice(idx, 1);
        }
    }

//removing enemies
function removeEnemy(idx:int):void 
{
    if(idx >= 0)
    {
        removeChild(enemy[idx]);
        enemy.splice(idx, 1);
        }
    }

//removing civils
function removeBullet(idx:int):void 
{
    if(idx >= 0)
    {
        removeChild(bullets[idx]);
        bullets.splice(idx, 1);
        }
    }

//removing expired explosions
function removeExEplosions():void 
{
    var tempExplosion:MovieClip;
    for(var i=explosions.length-1; i>=0; i--)
    {
        tempExplosion = explosions[i];
        if (tempExplosion.currentFrame >= tempExplosion.totalFrames)
        {
            removeExplosion(i);
            }
        }
    }

//removing civils
function removeExplosion(idx:int):void 
{
    if(idx >= 0)
    {
        removeChild(explosions[idx]);
        explosions.splice(idx, 1);
        }
    }



/*--------------------------STATE_END------------------------------*/

function endGame():void
{

    }


/*gameScreen*/

/*endScreen*/

ここには他にも悪いコードがあると確信していますが、それは今は問題ではありません。

AS および AS Linkage のエクスポートが設定されています: http://i.stack.imgur.com/UvMAt.png

編集: 2 番目の var 宣言を削除しても、同じエラーが発生します。

4

1 に答える 1

0

より多くのコードと説明を提供していただければ幸いですが、1046 について私が見つけたのは次のとおりです。「このエラーが発生する理由の 1 つは、ライブラリ内のオブジェクトと同じ名前のオブジェクトがステージ上にある場合です。」

見てください: http://curtismorley.com/2007/06/20/flash-cs3-flex-2-as3-error-1046/

コード 1046 について Web で説明を検索しましたか? これをチェックしましたか?

var mp2 つの宣言があることがわかりました。最初のものを削除してみてくださいvar mp:MovieClip;。うまくいかない場合は、Flash ライブラリを注意深くチェックし、そのMP_00名前が利用可能であることを確認してください。ムービークリップの場合は、ActionScript 用にエクスポートされていることを確認します。インスタンス名の場合は、2 回使用されていないことを確認してください。

編集。

私の提案は:

1- のすべての参照をmpに変更しmp1ます。「ライブラリ内のオブジェクトと同じ名前のステージ上のオブジェクト」というインスタンスと競合している可能性があります。

2-宣言セクションのvar mp1:MP_00;代わりに。var mp:MovieClip;

3- mp1 = new MP_00();startGame() 関数に戻る

mp14-新しい変数が必要な場所にあり、参照がないことを確認してください。mp変数に。

もしも…それでもうまくいかない。私は提案します:あなたのMovieClipリンクの名前を、のようTestAに、または何でも変更してください。はい、すべてに疑問がありますが、魔法はありません。すべてをテストすると、問題が確実に表示されます。

編集。

機能にmapMove()...

まずspeedUp()、コメントではなく関数が利用可能であることを確認し、関数で呼び出しますplayGame()playerSpeed変数には値が必要なので、 : var playerSpeed = playerSpeed + 1;for に変更してくださいplayerSpeed = playerSpeed + 1;var同じ変数に対して宣言を 2 回使用しないでください。(var playerSpeed:Number;ヘッダーファイルを参照してください。)

その上...MP_00ステージ上のクリップがあなたのクリップかどうかを知る必要がありmp1ます。(あなたが持っているすべてのコードを公開したと仮定しました。)

ケース A :MP_00クリップを開始すると、ステージ上にあります。

実際MP_00に画面に表示されている場合は、実行する必要がないことを意味しmp1 = new MP_00();ますaddchild(mp1);newこれはすでに完了しています (ライブラリからクリップをドラッグしてインスタンス名を指定するのは、 と を実行するのと同じaddchildです)。

インスタンス名を見つけます (または名前を付けます)。インスタンス名を取得し、オブジェクトを移動する必要があります (ここではインスタンス名は ですmp1)。

mp1.y = mp1.y - playerSpeed;

ケース B :MP_00クリップを開始したときにステージ上にいません。

実行: 1- あなたの宣言: var mp1:MP_00; 2- 割り当てメモリ: mp1 = new MP_00(); 3- 表示リストに追加: addchild(mp1); 4- "Shake it bb":mp1.y = mp1.y - playerSpeed;またはmp1.y -= playerSpeed;

あなたの知識レベルが正確にはわからないので、すべてを入れてみました。多すぎたらごめんなさい。

于 2013-04-14T17:52:26.133 に答える