我是Actionscript和Adobe Flash CS6的新手,为了一点乐趣,我决定尝试制作一个小游戏。我有一些关于一般实施方法的新手(或noob-y)问题。
我到目前为止阅读的文档建议创建一个新的flash项目,然后创建一个文档类:
package {
import flash.display.MovieClip;
public class MyMainClass extends MovieClip {
public function MyMainClass() {
}
}
}
我想知道我是否使用这个MainClass来编码整个游戏或在场景中包含动作脚本,并且有多个场景,或两者的某种组合。
假设我的游戏中有5个想要的级别,我会做一些类似的事情:
package {
import flash.display.MovieClip;
public class MyMainClass extends MovieClip {
public function MyMainClass() {
StartLevel1();
StartLevel2();
StartLevel3();
StartLevel4();
StartLevel5();
}
public function StartLevel1() {
// Do something
}
public function StartLevel2() {
// Do something
}
public function StartLevel3() {
// Do something
}
public function StartLevel4() {
// Do something
}
public function StartLevel5() {
// Do something
}
}
}
或在每个场景中使用actionscript创建5个场景? 谁能为我提供一些起点? 感谢
答案 0 :(得分:1)
我不知道有谁对场景有任何好处。
但是,正如您所知,时间轴本身是一个很好的工具,用于管理Flash资产的状态。如果您使用它,您还可以获得隐藏的优势,即您无需下载100%的文件即可使用它(因此您可以通过取消选中“减少甚至消除对预加载器的需求” “在你的图书馆符号上。
Lars非常正确地指出,很少有开发人员了解这种技术,而且我知道能够并且将会帮助那些有兴趣探索这种技术的人。那个人现在正在帮助你。因此,如果您选择这样做,请记住,除非我碰巧注意到您的帖子并做出回应,否则您大部分时间都在自己身上。
我不支持时间轴脚本,very few exceptions。我建议采用“both and”方法,您可以使用文档类来控制时间轴实例。
您的文档类可能如下所示:
public class Game extends MovieClip {
protected var _level:ILevel;//Interface your Level MovieClips will implement
protected var levelController:LevelController = new LevelControler();
protected var currentLevel:int;
protected var maxLevels:int = 5;
public function Game() {
levelController.addEventListener(LevelEventKind.LEVEL_COMPLETE, nextLevel);
levelController.addEventListener(LevelEventKind.LEVEL_FAILED, gameOver);
startLevel(currentLevel);
}
public function startLevel(levelNumber:int):void {
goToLabel('Level' + String(levelNumber));
}
public function get level():ILevel {
return _level;
}
public function set level(value:ILevel):void {
_level = value;
//internally, this should release all listeners to the last
//level object (if any) so you don't get a memory leak
levelController.level = _level;
}
protected function nextLevel(e:Event):void {
if (currentLevel < maxLevels) {
startLevel(++currentLevel);
} else {
//do you won logic here
}
}
protected function gameOver(e:Event):void {
//do bombed out logic here
}
protected function goToLabel(label:String):void {
for each (var frameLabel:FrameLabel in currentLabels) {
if (frameLabel.name==label) {
//if your swf is media-heavy, may want to check that frame
//is loaded if you chose to reduce/eliminate preloader
goToAndStop(label);
return;
}
}
trace('no such label as', label);
}
}
这可以让您获得一个游戏,您可以在不改变单行ActionScript的情况下更改不同级别的外观,并且可以通过分配实现ILevel的不同基类来稍微改变它们来改变它们的工作方式。你也可以通过交换不同风格的LevelController来改变你的功能,但是你的主文档类(在这个例子中是游戏)会意识到这种变化(可以在不改变游戏的情况下进行其他更改)。