Actionscript 3 动作脚本3评分/数学

Actionscript 3 动作脚本3评分/数学,actionscript-3,flash-cs5,Actionscript 3,Flash Cs5,我一直在尝试在AS3中创建的游戏中实现一个分数。到目前为止,我已经创建了一个计分系统,可以根据游戏中的动作加分/减分。我已经决定让计分系统只是加分而不是减分会更简单,当达到某个数字时,结束比赛 我遇到的问题是,一方面,游戏正在进行检查,看棋子是否在正确的位置。如果是,则玩家获胜。另一方面,计数器需要计数并达到某个数字(10),然后才能决定玩家输。目前有一些奇怪的行为正在发生,我可以把碎片拖来拖去,而不把它们放在正确的位置,计数器仍然超过10。我尝试了一些改变数学的方法,使其总和不同,但功能是相同

我一直在尝试在AS3中创建的游戏中实现一个分数。到目前为止,我已经创建了一个计分系统,可以根据游戏中的动作加分/减分。我已经决定让计分系统只是加分而不是减分会更简单,当达到某个数字时,结束比赛

我遇到的问题是,一方面,游戏正在进行检查,看棋子是否在正确的位置。如果是,则玩家获胜。另一方面,计数器需要计数并达到某个数字(10),然后才能决定玩家输。目前有一些奇怪的行为正在发生,我可以把碎片拖来拖去,而不把它们放在正确的位置,计数器仍然超过10。我尝试了一些改变数学的方法,使其总和不同,但功能是相同的。我需要改变什么,才能使它像第一次描述的那样工作

stop();

//Create the score counter

import flash.text.TextField;

var score = 0;
scorecounter.text = score;
function init(): void
{
    score = 0;
    scorecounter.text = "SCORE:" + score.toString();
}

function updateScore(): void
{
    scorecounter.text = ++score;
}

function evaluateScore(): void //this is meant to stop the score going below 0
{
    scorecounter.text = --score;
    if(score < 0) {
        score -= score;
    }
} 

/*Omitted some functions and var's for object positions and events*/

function stopDragging(e:MouseEvent):void {
    e.currentTarget.stopDrag();
    switch (e.currentTarget){
        case apple: 
            if (apple.x < appleEndX - offset || apple.x > appleEndX + offset || 
                apple.y < appleEndY - offset || apple.y > appleEndY + offset) {

                apple.x = appleStartX;
                apple.y = appleStartY;
                soundOne();
                updateScore();
            } else { 
                apple.x = appleEndX; 
                apple.y = appleEndY;
                soundTwo();
                updateScore();
                checkGame();
            }
            break;
            //Lots of other cases, using the same method

            //The end of the game - here, I've been trying to set it to 
            //check whether the player will win or lose
    }
}

function checkGame(): void {

    if (apple.x == appleEndX && apple.y == appleEndY && pear.x == pearEndX && 
        pear.y == pearEndY && guava.x == guavaEndX && guava.y == guavaEndY && 
        pineapple.x == pineappleEndX && pineapple.y == pineappleEndY && 
        plum.x == plumEndX && plum.y == plumEndY && 
        purple.x == purpleEndX && purple.y == purpleEndY) 
    {
        trace("You win!");
        gotoAndStop(149);
        soundFive();
    } else if (score == 10) {
        gotoAndStop(150);
        soundSix();
        trace("You lose.");
    }
}
stop();
//创建分数计数器
导入flash.text.TextField;
var得分=0;
scorecounter.text=分数;
函数init():void
{
得分=0;
scorecounter.text=“SCORE:+SCORE.toString();
}
函数updateScore():void
{
scorecounter.text=++分数;
}
函数evaluateScore():void//这意味着阻止分数低于0
{
scorecounter.text=--分数;
如果(分数<0){
分数-=分数;
}
} 
/*省略了对象位置和事件的一些函数和变量*/
函数停止拖动(e:MouseEvent):无效{
e、 currentTarget.stopDrag();
开关(如currentTarget){
苹果案例:
如果(apple.xappleEndX+offset | |
apple.yappleEndY+offset){
apple.x=appleStartX;
apple.y=appleStartY;
soundOne();
updateScore();
}否则{
apple.x=appleEndX;
apple.y=appleEndY;
soundTwo();
updateScore();
checkGame();
}
打破
//很多其他情况下,使用相同的方法
//游戏结束了-在这里,我一直在尝试设置它
//检查玩家是赢还是输
}
}
函数checkGame():void{
如果(apple.x==appleEndX&&apple.y==appleEndY&&pear.x==pearEndX&&
pear.y==pearEndY&&guava.x==guavaEndX&&guava.y==guavaEndY&&
菠萝.x==菠萝ndx&&菠萝.y==菠萝ndy&&
李子.x==plumEndX&&plum.y==plumEndY&&
紫色.x==purpleEndX&&purple.y==purpleEndY)
{
trace(“你赢了!”);
gotoAndStop(149);
soundFive();
}否则如果(分数=10){
gotoAndStop(150);
soundSix();
跟踪(“你输了”);
}
}

我认为逻辑有点混乱,但我从您的代码中了解到,我们的想法是将拖动的山墙项目移动到正确的x,y位置,公差为“偏移”?我们的目标是以尽可能低的“分数”(或移动次数)达到这一目标,如果移动次数(分数)大于10,那么你会输掉比赛吗

目前唯一能检查你是否做了10个动作的地方是“checkGame”,只有在你的“apple”位置正确时才会调用此方法。如果位置不正确,则移动次数会增加,但不会检查分数。因此,当你最终进入“checkGame”,但正确定位“apple”时,分数可能已经超过10。因此,您的“分数==10”检查也将失败

因此,你需要的是检查游戏中的每一个动作,如下所示:

function stopDragging(e:MouseEvent):void {
    ...
    switch (e.currentTarget){
        case apple: 
            if (apple.x < appleEndX - offset || apple.x > appleEndX + offset || 
                apple.y < appleEndY - offset || apple.y > appleEndY + offset) {

                apple.x = appleStartX;
                apple.y = appleStartY;

                soundOne();
            } else { 
                apple.x = appleEndX; 
                apple.y = appleEndY;

                soundTwo();
            }
        break;
    ...
    }
    //Check the game on every turn.
    checkGame();
}


function checkGame(){

    //Update the score
    score++;

     if (apple.x == appleEndX && apple.y == appleEndY && pear.x == pearEndX && 
         pear.y == pearEndY && guava.x == guavaEndX && guava.y == guavaEndY && 
         pineapple.x == pineappleEndX && pineapple.y == pineappleEndY && 
         plum.x == plumEndX && plum.y == plumEndY && 
         purple.x == purpleEndX && purple.y == purpleEndY)
     {
          //Do the game win.
     }
     else if (score>=10)
     {
         //Else if you have a score greater then or equal to 10 do the game lose.
     }
}
函数停止拖动(e:MouseEvent):无效{
...
开关(如currentTarget){
苹果案例:
如果(apple.xappleEndX+offset | |
apple.yappleEndY+offset){
apple.x=appleStartX;
apple.y=appleStartY;
soundOne();
}否则{
apple.x=appleEndX;
apple.y=appleEndY;
soundTwo();
}
打破
...
}
//每回合都要检查比赛。
checkGame();
}
函数checkGame(){
//更新分数
分数++;
如果(apple.x==appleEndX&&apple.y==appleEndY&&pear.x==pearEndX&&
pear.y==pearEndY&&guava.x==guavaEndX&&guava.y==guavaEndY&&
菠萝.x==菠萝ndx&&菠萝.y==菠萝ndy&&
李子.x==plumEndX&&plum.y==plumEndY&&
紫色.x==purpleEndX&&purple.y==purpleEndY)
{
//这场比赛赢了吗。
}
否则如果(分数>=10)
{
//否则,如果你的分数大于或等于10,游戏将失败。
}
}

user3293367您调用updateScore()两次:在
if
else
中。这就好像你每次都在调用它一样。效果很好-谢谢!我注意到,当分数正确更新时,视觉分数不再更新。我是否可以将checkGame插入scorecounter.text以使其再次工作?是的,所以在score++下,您可以添加scorecounter.text=score;