我正在尝试构建一个简单的Flash游戏,用户将宽边帽拖到仙人掌上。我已经得到了它,当你将松墨布拖到仙人掌的任何地方时,它会回到原来的位置。我把它拖到仙人掌上,它就在那里。
我想要的是当用户将宽边帽拖到仙人掌上时,它会将您带到一个屏幕上,上面写着“YAY!再玩一次?”我在我的if语句中放了一个gotoAndPlay():
if(dropTarget.parent.name == "cactus")
{
//scaleX = scaleY = 0.2;
//alpha = 0.2;
//y = stage.stageHeight - height - -100;
//buttonMode = false;
//removeEventListener(MouseEvent.MOUSE_DOWN, down);
gotoAndPlay("playAgain");
trace("dropped on cactus");
}
else
{
returnToOriginalPosition();
}
我将第二帧标记为“playAgain”。我收到一个错误说: ArgumentError:错误#2109:帧标签playAgain在场景playAgain中找不到。 在flash.display :: MovieClip / gotoAndPlay() 在net.dndgtal.Cactus_Game :: sombrero / stageUp()
我已经Google搜索并检查并仔细检查了所有建议,但无法使其正常工作。我没有场景“playAgain”,只有“scene1”。我已经尝试指定场景和帧 - 这两者都不起作用。我尝试将第二帧放入gotoAndPlay(2),但这样做什么也没做。
我错过了什么吗?任何帮助,将不胜感激。如果有帮助,这是我的所有代码:
package net.dndgtal.Cactus_Game
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.geom.Point;
public class sombrero extends MovieClip
{
protected var OriginalPosition:Point;
public function sombrero ()
{
OriginalPosition = new Point(x, y);
buttonMode = true;
addEventListener ( MouseEvent.MOUSE_DOWN, down );
//trace("sombrero constructor");
}
protected function down (event:MouseEvent):void
{
parent.addChild(this);
startDrag();
stage.addEventListener(MouseEvent.MOUSE_UP, stageUp);
//trace("DOWN");
}
protected function stageUp(event:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_UP, stageUp);
stopDrag();
if (dropTarget)
{
if(dropTarget.parent.name == "cactus")
{
//scaleX = scaleY = 0.2;
//alpha = 0.2;
//y = stage.stageHeight - height - -100;
//buttonMode = false;
//removeEventListener(MouseEvent.MOUSE_DOWN, down);
gotoAndPlay("playAgain");
trace("dropped on cactus");
}
else
{
returnToOriginalPosition();
}
}
else
{
returnToOriginalPosition();
}
}
protected function returnToOriginalPosition(): void
{
x = OriginalPosition.x;
y = OriginalPosition.y;
}
}
}
谢谢!如果您有任何问题,请告诉我。
答案 0 :(得分:0)
您的问题可能是范围之一。当您使用gotoAndPlay("playAgain")
时,它将采用当前时间轴(范围),即sombrero
类,并尝试查找名为" playAgain"的帧标签或场景。在它的时间表上。
据推测,你想要主时间轴gotoAndPlay框架标签" playAgain"而不是宽边帽。
要访问主时间轴,您可以使用MovieClip(root).gotoAndPlay("playAgain")
。
如果它不是主时间轴,而是宽边帽的父级,您可以使用MovieClip(parent).gotoAndPlay("playAgain")
如果宽边帽和你试图前进的时间轴之间的关系比这更复杂,那么你可以在你的宽边帽构造函数中传递对它的引用:
private var targetTimeline:MovieClip;
public function sombrero (targetTimeline_:MovieClip)
{
targetTimeline = targetTimeline_;
//...rest of constructor code
然后:
if(dropTarget.parent.name == "cactus"){
targetTimeline.gotoAndPlay("playAgain");
当你创建宽边帽时,传入目标时间轴:
var hat:sombrero = new sombrero(target);
答案 1 :(得分:-1)
我认为你不能使用gotoAndPlay
从你的班级直接进入主舞台的第2帧,所以你可以这样做:
package net.dndgtal.Cactus_Game
{
...
import flash.events.Event
public class sombrero extends MovieClip
{
...
private var __parent:MovieClip
public function sombrero ()
{
...
addEventListener(Event.ADDED_TO_STAGE, function(e:Event){
__parent = e.currentTarget.parent
...
})
...
}
...
protected function stageUp(event:MouseEvent):void
{
...
__parent.gotoAndPlay(2) // here you can use the frame name if it have one
...
}
}
}