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