【问题标题】:AS3 Flash how to save score in game and display on different frameAS3 Flash如何在游戏中保存分数并显示在不同的帧上
【发布时间】:2014-03-05 12:36:11
【问题描述】:

我正在开发一个每关有 3 轮的琐事游戏。在玩游戏的框架上,您可以看到一个带有当前分数的框,当用户完成一轮后,他们将被带到另一个框架,您可以在其中看到所有三个回合的得分。我似乎无法正确显示分数。这是一张大致说明我希望如何显示分数的图像。

这是我在第一轮的代码

    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    //Button 
    btn_six.addEventListener(MouseEvent.MOUSE_DOWN, onPressHandler);

    btn_six.buttonMode = true;
    btn_six.useHandCursor = true;

    function onPressHandler(myEvent:MouseEvent){
    trace('Press');
    btn_six.gotoAndPlay(5);
    }

    var saveDataObject:SharedObject;
    var currentScore:int;

    init();

    function init():void{

saveDataObject = SharedObject.getLocal("test");
currentScore = 0;

addEventListener(Event.ENTER_FRAME, saveData);

if(saveDataObject.data.savedScore == null){
    trace("No saved data yet.");
    saveDataObject.data.savedScore = currentScore;
} else {
    trace("Save data found.");
    loadData();
}
    }


    function saveData(e:Event):void{
        saveDataObject.data.savedScore = currentScore;
        trace("Data Saved!");
        saveDataObject.flush();
        trace(saveDataObject.size);
    }

    function loadData():void{
        currentScore = saveDataObject.data.savedScore;
        trace("Data Loaded!");
    }







    var questions:Array=['"I look like a dangling parsnip in this!" she cried. "I will never __________ these jeans!',
                 "Tell the freckled parrot to put his car in __________.",
                 "When purchasing a buttercream trowel, always choose one made of __________.",
                 "Everybody has a cracked snowflake. The question is, __________ one is yours? ",
                 "Standing at the dock, the loopy basket watched the cruise ship set __________ without him. ",];
    var answers:Array=[   ["wear","where"], ["idle","idol"], ["steel","steal"] ,[ "which","witch"] ,[ "sail","sale"] ];




     var qno=0;var rnd1; var rnd2;
      tick.visible=false;cross.visible=false;incorrect0.visible=false;incorrect1.visible=false;incorrect2.visible=false;incorrect3.visible=false;
    var right_answers=0;
    var wrong_answers=0;


    function change_question(){
if(tick.visible){right_answers++;}
if(cross.visible){wrong_answers++;}
if(qno==questions.length){gotoAndPlay(2);}else{
tick.visible=false;cross.visible=false;
rnd1=Math.ceil(Math.random()*2);
rnd2=Math.ceil(Math.random()*questions.length)-1;
q.text=questions[rnd2];
if(questions[rnd2]=="x"){change_question();}
questions[rnd2]="x";
enable_disable(1);
if(rnd1==1){opt1.text=answers[rnd2][0];opt2.text=answers[rnd2][1];}
if(rnd1==2){opt1.text=answers[rnd2][1];opt2.text=answers[rnd2][0];}
//if(rnd1==3){opt1.text=answers[rnd2][1];opt2.text=answers[rnd2][2];opt3.text=answers[rnd2][0];}
if(wrong_answers==0){incorrect0.visible=true;}
if(wrong_answers==1){incorrect1.visible=true;}
if(wrong_answers==2){incorrect2.visible=true;}
if(wrong_answers==3){incorrect3.visible=true;}
if(wrong_answers==3){gotoAndPlay(3);}
}}

    function enable_disable(a){
if(a==0){shade1.mouseEnabled=false;shade2.mouseEnabled=false;}
if(a==1){shade1.mouseEnabled=true;shade2.mouseEnabled=true;}}

    change_question();

    function ButtonAction1(eventObject:MouseEvent) {qno++;change_question();} 

    shade1.addEventListener(MouseEvent.CLICK, ButtonAction2);
    shade2.addEventListener(MouseEvent.CLICK, ButtonAction3);


    function ButtonAction2(eventObject:MouseEvent) {
enable_disable(0);if(rnd1==1)   {tick.visible=true;tick.y=shade1.y}else{cross.visible=true;cross.y=shade1.y}
qno++;change_question();
}
    function ButtonAction3(eventObject:MouseEvent) {
enable_disable(0);if(rnd1==2){tick.visible=true;tick.y=shade2.y}else{cross.visible=true;cross.y=shade2.y}
qno++;change_question();
}


    stop();

在第 1 轮清除时,代码如下所示:

    ra.text=right_answers +"/5";

    if(wrong_answers==3){gotoAndPlay(3);}

第 2 轮的代码与第 1 轮的代码相同 这是第 2 轮清除的代码:

    ra2.text=right_answers_r2 +"/10";

    if(wrong_answers==3){gotoAndPlay(3);}

    addEventListener(Event.ENTER_FRAME,myFunction);
    function myFunction(event:Event) {
        trace("Do Something");
        showScoreText();
    }

    function showScoreText():void{
        MovieClip(root).round1.loadData();
        ra.text = MovieClip(root).round1.loadData("");
        trace("Score text visible");
    }

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    将您的 loadData 函数更改为:

    function loadData(){
        currentScore = saveDataObject.data.savedScore;
        trace("Data Loaded!");
        return currentScore;
        //^One does not simply expect something returned without returning anything
    }
    

    并且没有可接受的参数,所以改变

    ra.text = MovieClip(root).round1.loadData("");
    

    ra.text = MovieClip(root).round1.loadData();
    

    【讨论】:

    • 感谢您的帮助!我尝试了您的建议,但收到此错误:1051:返回值必须未定义。我不知道该怎么办,有什么建议吗?
    • @user2933373 对不起,void 告诉函数not to return anything,所以只需将其删除(在答案中编辑,阅读更多here
    • 谢谢!该错误消失了,但出现了另一个错误。 TypeError:错误 #1009:无法访问空对象引用的属性或方法。在 bubblingdoubles_107_fla::round2_19/showScoreText()[bubblingdoubles_107_fla.round2_19::frame2:58] 在 bubblingdoubles_107_fla::round2_19/myFunction()[bubblingdoubles_107_fla.round2_19::frame2:54] 它告诉我 showScoreText();和 MovieClip(root).round1.loadData();为空,但我不知道如何解决这个问题。我该怎么办?
    • @user2933373 请告诉我5854 行的代码
    • 第54行的代码是showScoreText();第 58 行的代码是 MovieClip(root).round1.loadData();
    【解决方案2】:

    试试这个,

    假设您已经完成了第 1 轮并且您的 currentScore 为 10 现在您将进入第 2 帧的第 2 轮并且您在舞台上有一个分数文本字段现在您必须像这样附加文本score_txt.appendText(String(currentScore)+"\n"); 这有帮助看到第 1 轮和第 2 轮的分数,请在所有回合中继续这样做。而已。

    【讨论】:

      【解决方案3】:

      您可以将每轮结束时的 currentScore 存储在关联数组中并显示出来。

      var scorearray:Array = [{scored:5, outof:10},{scored:10, outof:20},{scored:20, outof:30}];
      function displayScore():void
      {
          for(var i:int=0;i<scorearray.length; i++)
          {
              var texts:TextField = new TextField();
                  texts.text = scorearray[i].scored +"/" + scorearray[i].outof;
                  texts.y = i * 20 + 30;
                  addChild(texts)
          }
      }
      
      displayScore();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        • 2017-12-22
        • 2014-02-18
        • 1970-01-01
        相关资源
        最近更新 更多