AS3 Flash CS6 достъп до недефинирани свойства? Помощта ще бъде много задължена

Свойства като score1; score2, lives1, lives2 и STAGE изглежда са недефинирани свойства. не виждам защо? Моля помогнете...

напр. C:\Users\PC\Desktop\Whack My Mole - Android\Game.as, ред 429 1120: Достъп до недефинирано свойство score1. C:\Users\PC\Desktop\Whack My Mole - Android\Game.as, ред 430 1120: Достъп до недефинирано свойство score1.

пакет {

import flash.display.Stage;
import flash.events.TouchEvent;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.utils.Timer;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.filters.DropShadowFilter;
import flash.text.AntiAliasType;
import flash.text.Font;

public class Game{

    //Global Declarations
    private var STAGE:Stage;

    'Graphics'
    private var Title:Title_mc;
    private var Score_lbl:Label_Score_txt;
    private var Lives_lbl:Label_Lives_txt;
    private var holes:MoleHoles_mc;
    private var Lives_txt:TextField;
    private var Score_txt:TextField;
    private var Shadow:DropShadowFilter;
    private var Pause_btn:Button_Pause;

    'Game Properties'
    private var SLEEP:Timer;
    private var countdown:Timer;
    private var countdownComplete:Timer;
    private var countdownDelay:Timer;
    private var count:TextField;
    private var count_inc:int;

    private var Paused:Boolean;
    private var moles:int;
    public static var mole_spawn_delay:int = 1000;
    public static var mole_death_delay:int = 1000;
    public static var molePlacable:Boolean = true;
    private var unavailableHole:int;

    public static var molesName:String;
    private var lvl:int = 51;

    private var score1:Anim_Score1_mc;
    private var score2:Anim_Score2_mc;
    private var lives1:Anim_Lives1_mc;
    private var lives2:Anim_Lives2_mc;

    'Player Properties'
    public static var Score:int = 0;
    public static var Lives:int = 3;
    public static var incrementer:int = 1;

    public function Game(STAGE:Stage) {
        this.STAGE = STAGE;

        //Enable Touch Events
        Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

        //Instantiate Objects
        Shadow = new DropShadowFilter();

        //Handle new frames
        STAGE.addEventListener(Event.ENTER_FRAME, handle_ENTER_FRAME);

        //Draw Graphics
        'Menu Title'
        Title = new Title_mc();
        Title.x = 250.5;
        Title.y = 62.35;
        STAGE.addChild(Title);

        'Content'
        holes = new MoleHoles_mc();
        holes.x = 0;
        holes.y = 123.9;
        STAGE.addChild(holes);

        'Score Label'
        Score_lbl = new Label_Score_txt();
        Score_lbl.x = 19.65;
        Score_lbl.y = 146.75;
        STAGE.addChild(Score_lbl);

        'Lives Label'
        Lives_lbl = new Label_Lives_txt();
        Lives_lbl.x = 358.25;
        Lives_lbl.y = 141.05;
        STAGE.addChild(Lives_lbl);

        'Score Value'
        Score_txt = new TextField();
        Score_txt.x = 19.65;
        Score_txt.y = 209.95;
        Score_txt.width = 100;
        Score_txt.defaultTextFormat = new TextFormat("Balloonist", 40, 0xFFFFFF);
        Score_txt.selectable = false;
        Score_txt.text = String(Score);
        STAGE.addChild(Score_txt);

        'Lives Value'
        Lives_txt = new TextField();
        Lives_txt.x = 410;
        Lives_txt.y = 204.70;
        Lives_txt.defaultTextFormat = new TextFormat("Balloonist", 40, 0xFFFFFF);
        Lives_txt.selectable = false;
        Lives_txt.text = String(Lives);
        STAGE.addChild(Lives_txt);

        'Pause Button'
        Pause_btn = new Button_Pause();
        Pause_btn.x = 22.40;
        Pause_btn.y = 772.85;
        STAGE.addChild(Pause_btn);
        Pause_btn.buttonMode = true;
        Pause_btn.addEventListener(TouchEvent.TOUCH_BEGIN, handle_Pause);

        //Start Countdown
        countDown();
    }

    //Pause/resume game
    private function handle_Pause(e:TouchEvent):void
    {
        //...
    }

    //Sleep Method
    private function sleep(seconds:int):void
    {
        SLEEP = new Timer(seconds, 1); // 1 second
        SLEEP.addEventListener(TimerEvent.TIMER_COMPLETE, sleep_end);
        SLEEP.start();
        STAGE.frameRate = 0;
    }

    //Sleep Method Complete
    private function sleep_end(e:TimerEvent):void
    {
        SLEEP.removeEventListener(TimerEvent.TIMER_COMPLETE , sleep_end);
        STAGE.frameRate = 24;
    }

    //Count Down Timer
    private function countDown():void
    {
        Paused = true;

        count_inc = 5;
        count = new TextField();
        count.x = 213.9;
        count.y = 158.05;
        count.height = 150;
        count.width = 150;
        count.defaultTextFormat = new TextFormat("Balloonist", 150, 0xFFFFFF);
        count.filters = [Shadow];
        count.antiAliasType = AntiAliasType.ADVANCED;
        count.sharpness = 400;
        count.text = String(count_inc);
        STAGE.addChild(count);

        countdownComplete = new Timer(5000, 1);
        countdownComplete.addEventListener(TimerEvent.TIMER, coutdown_Complete);

        countdownDelay = new Timer(100);
        countdownDelay.addEventListener(TimerEvent.TIMER, countDown_Tick);

        countdown = new Timer(1000);
        countdown.addEventListener(TimerEvent.TIMER, countDown_end);

        countdownComplete.start();
        countdownDelay.start();
        countdown.start();
    }

    //Handle countdown tick
    private function countDown_Tick(e:TimerEvent):void
    {
        if(count_inc <= 0)
        {
            countdown.stop();
            countdown.removeEventListener(TimerEvent.TIMER, countDown_end);
        }else {
            countdownDelay.delay = 100;
        }
    }

    //Handle countown complete
    private function countDown_end(e:TimerEvent):void
    {
        if(count_inc <= 0)
        {
            countdownDelay.stop();
            countdownDelay.removeEventListener(TimerEvent.TIMER, countDown_Tick);
        }else{
            count_inc -= 1;
            count.text = String(count_inc);
        }
    }

    //Countdown cleanup
    private function coutdown_Complete(e:TimerEvent):void
    {
        STAGE.removeChild(count);
        Paused = false;
    }

    //Main Game Loop
    private function handle_ENTER_FRAME(e:Event):void
    {
        //Update game stuff
        if(!Paused)
        {
            if(molePlacable)
            {
                sleep(mole_spawn_delay);
                newMole();
            }

            Score_txt.text = String(Score);
            Lives_txt.text = String(Lives);
        }

        //Clear stage & display game over interface
        if(Lives <= 0)
        {
            STAGE.removeEventListener(Event.ENTER_FRAME, handle_ENTER_FRAME);
            STAGE.removeChild(Title);
            STAGE.removeChild(holes);
            STAGE.removeChild(Score_lbl);
            STAGE.removeChild(Lives_lbl);
            STAGE.removeChild(Pause_btn);
            STAGE.removeChild(Score_txt);
            STAGE.removeChild(Lives_txt);

            var gameOver:GameOver = new GameOver(STAGE);
        }

        //Update mole stats
        if(moles > 50)
        {
            lvl = 71;
        }

        //Dissallow score to go below 0
        if(Score < 0)
        {
            Score = 0;
        }
    }

    //Create new Mole
    private function newMole():void
    {
        'Specify mole hole'
        var rnd = Math.ceil(Math.random()*11);

        'Ensure mole does not spawn from preceding hole'
        while(rnd == unavailableHole)
        {
            rnd = Math.ceil(Math.random()*11);
        }

        var X:int;
        var Y:int;
        switch(rnd)
        {
            case 0:
                X = -14.75;
                Y = 293.45;
                break;

            case 1:
                X = 109.25;
                Y = 291.35;
                break;

            case 2:
                X = 223.75;
                Y = 291.35;
                break;

            case 3:
                X = 337.2;
                Y = 291.35;
                break;

            case 4:
                X = 0;
                Y = 430;
                break;

            case 5:
                X = 118.7;
                Y = 430;
                break;

            case 6:
                X = 226.9;
                Y = 430;
                break;

            case 7:
                X = 342.45;
                Y = 430
                break;

            case 8:
                X = 0;
                Y = 561.35
                break;

            case 9:
                X = 112.4;
                Y = 561.35;
                break;

            case 10:
                X = 229;
                Y = 561.35;
                break;

            case 11:
                X = 339.3;
                Y = 561.35;
                break;
        }


        'Specify molde to add'
        rnd = lvl * Math.random();
        if(rnd <=40)
        {
            //Default + 10*incrementer
            var mole:Mole_Default_mc = new Mole_Default_mc(STAGE, X, Y);
        }else if(rnd <=42){
            //Crazy - 5*incrementer
            var mole2:Mole_Crazy_mc = new Mole_Crazy_mc(STAGE, X, Y);
        }else if(rnd <=43){
            //Crazy2 - 10*inrementer
            var mole3:Mole_Crazy2_mc = new Mole_Crazy2_mc(STAGE, X, Y);
        }else if(rnd <45){
            //Lady + 1 life
            var mole4:Mole_Lady_mc= new Mole_Lady_mc(STAGE, X, Y);
        }else if(rnd <46){
            //Ninja - 2*inrementer
            var mole5:Mole_Ninja_mc = new Mole_Ninja_mc(STAGE, X, Y);
        }else if(rnd <47){
            //Zombie + 5 * lives
            var mole6:Mole_Zombie_mc = new Mole_Zombie_mc(STAGE, X, Y);
        }else if(rnd <48){
            //reaper - Lives
            var mole7:Mole_Reaper_mc = new Mole_Reaper_mc(STAGE, X, Y);
        }else if(rnd <49){
            //Snob + 250
            var mole8:Mole_Snob_mc = new Mole_Snob_mc(STAGE, X, Y);
        }else if(rnd <52){
            //Angel + 3 lives
            var mole9:Mole_Angel_mc = new Mole_Angel_mc(STAGE, X, Y);
        }else if(rnd <54){
            //Demon - 3 lives
            var mole10:Mole_Demon_mc = new Mole_Demon_mc(STAGE, X, Y);
        }else if(rnd <55){
            //Creature - 3+incrementer
            var creature:Mole_Creature_mc = new Mole_Creature_mc(STAGE, X, Y);
        }else if(rnd <56){
            //Cyber + 50+incrementer
            var cyber:Mole_Cyber_mc = new Mole_Cyber_mc(STAGE, X, Y);
        }else if(rnd <57){
            //Grumpy + 5
            var grumpy:Mole_Grumpy_mc = new Mole_Grumpy_mc(STAGE, X, Y);
        }else if(rnd <58){
            //Hippie Lives+3 Score+100
            var hippie:Mole_Hippie_mc = new Mole_Hippie_mc(STAGE, X, Y);
        }else if(rnd<59){
            //Hyper 30*incrementer
            var hyper:Mole_Hyper_mc = new Mole_Hyper_mc(STAGE, X, Y);
        }else if(rnd<60){
            //Love timer-100
            var love:Mole_Love_mc = new Mole_Love_mc(STAGE, X, Y);
        }else if(rnd<61){
            //LoveZombie - 20*Lives
            var loveZombie:Mole_LoveZombie_mc = new Mole_LoveZombie_mc(STAGE, X, Y);
        }else if(rnd<70){
            //Sleepy Timer+100
            var sleepy:Mole_Sleepy_mc = new Mole_Sleepy_mc(STAGE, X, Y);
        }else if(rnd<71){
            //Warrior + (10*incrementer)*2
            var warrior:Mole_Warrior_mc = new Mole_Warrior_mc(STAGE, X, Y);
        }

        //Update mole stats
        moles += 1;
        if(mole_spawn_delay > 20 && mole_death_delay > 20)
        {
            mole_spawn_delay -= 10;
            mole_death_delay -= 5;
        }

        //Update incrementer
        if(moles > 100)
        {
            incrementer = 50;
        }else if(moles > 80)
        {
            incrementer = 40;
        }else if(moles > 60)
        {
            incrementer = 30;
        }else if(moles > 20)
        {
            incrementer = 20;
        }else if(moles > 10)
        {
            incrementer = 10;
        }
    }

    //Animation
    public static function animate(type:int)
    {
        if(type == 0)
        {
            score1 = new Anim_Score1_mc();
            score1.x = 40;
            score1.y = 250.6;
            STAGE.addChild(score1);

            var anim_timer:Timer = new Timer(2000, 1);
            anim_timer.addEventListener(TimerEvent.TIMER, remove_score1);
            anim_timer.start();
        }else if(type == 1)
        {
            score2 = new Anim_Score2_mc();
            score2.x = 32;
            score2.y = 248.6;
            STAGE.addChild(score2);

            var anim_timer2:Timer = new Timer(2000, 1);
            anim_timer2.addEventListener(TimerEvent.TIMER, remove_score2);
            anim_timer2.start();
        }else if(type == 2)
        {
            lives1 = new Anim_Lives1_mc();
            lives1.x = 430.9;
            lives1.y = 237.95;
            STAGE.addChild(lives1);

            var anim_timer3:Timer = new Timer(2000, 1);
            anim_timer3.addEventListener(TimerEvent.TIMER, remove_lives1);
            anim_timer3.start();
        }else{
            lives2 = new Anim_Lives2_mc();
            lives2.x = 430.9;
            lives2.y = 237.95; 
            STAGE.addChild(lives2);

            var anim_timer4:Timer = new Timer(2000, 1);
            anim_timer4.addEventListener(TimerEvent.TIMER, remove_lives1);
            anim_timer4.start();
        }
    }

    //Handle remove_score1
    private function remove_score1(e:TimerEvent):void
    {
        STAGE.removeChild(score1);
    }

    //Handle remove_score2
    private function remove_score2(e:TimerEvent):void
    {
        STAGE.removeChild(score2);
    }

    //Handle remove_lives1
    private function remove_lives1(e:TimerEvent):void
    {
        STAGE.removeChild(lives1);
    }

    //Handle remove_lives2
    private function remove_lives2(e:TimerEvent):void
    {
        STAGE.removeChild(lives2);
    }

}

}


person Lewis Tucker    schedule 19.04.2013    source източник
comment
Има ли предварително поставени екземпляри на сцената по време на проектиране? Проверете имената им, за да съвпадат с малки и големи букви.   -  person Vesper    schedule 19.04.2013
comment
Не, но добавям екземпляри към етапа, които преминават в свойството STAGE. Не виждам обаче как това ще доведе до грешка. Толкова объркващо аха xD.   -  person Lewis Tucker    schedule 19.04.2013
comment
animate е статична функция, в която се опитвате да зададете private var   -  person Urosan    schedule 19.04.2013
comment
Каква част от тази функция е частна? Промених свойствата, които използва, на публични, не че мисля, че това ще промени нещо. Не разбирам какво искаш да кажеш... хаха.   -  person Lewis Tucker    schedule 19.04.2013
comment
публичната статична функция animate трябва да бъде публична функция animate. Статиката е проблем.   -  person Urosan    schedule 19.04.2013
comment
Грешката продължава, но трябва да осъществя достъп до този метод от друг клас. Някаква работа?   -  person Lewis Tucker    schedule 19.04.2013
comment
Трябва да извлечете действителния екземпляр на Game клас, който работи, и да извикате неговия animate метод. Заобиколно решение е да задържите препратката към този екземпляр някъде в другия клас. Но бих преразгледал архитектурата на класа в такъв случай, какво съдържа какво и какво наистина се нуждае от препратка към етапа.   -  person Vesper    schedule 19.04.2013
comment
1 начин е да създадете new Game() и достъпът е по този начин или да направите Game singleton   -  person Urosan    schedule 19.04.2013
comment
Благодаря, сега ще се опитам да го коригирам :)   -  person Lewis Tucker    schedule 19.04.2013


Отговори (1)


Замени:

public static function animate(type:int)

с

public function animate(type:int)

Или ако искате този метод да е статичен добавете:

private static var _instance:Game = null;

в дефиницията на Game Class и променете функцията animate:

public static function animate(type:int):void{
if(_instance!=null) _instance.hidden_animate(type);
}

protected function hidden_animate(type:int){
   // PLACE HERE CODE FROM YOUR ORIGINAL ANIMATE FUNCTION
}

във функцията на конструктора добавете:

_instance = this;

Ако често използвате статични методи (като в този код), прочетете повече за дизайнерски модели като singleton :)

person Konrad    schedule 19.04.2013