Class 动作脚本在单个类中还是在多个场景中?
我对Actionscript和AdobeFlashCS6完全陌生,为了一点乐趣,我决定尝试制作一个小游戏。关于一般的实现方法,我有一些新手(或noob-y)问题要问 到目前为止,我一直在阅读的文档建议创建一个新的flash项目,然后创建一个文档类,以便:Class 动作脚本在单个类中还是在多个场景中?,class,actionscript,scene,Class,Actionscript,Scene,我对Actionscript和AdobeFlashCS6完全陌生,为了一点乐趣,我决定尝试制作一个小游戏。关于一般的实现方法,我有一些新手(或noob-y)问题要问 到目前为止,我一直在阅读的文档建议创建一个新的flash项目,然后创建一个文档类,以便: package { import flash.display.MovieClip; public class MyMainClass extends MovieClip { public functio
package {
import flash.display.MovieClip;
public class MyMainClass extends MovieClip {
public function MyMainClass() {
}
}
}
我想知道我是使用这个main类来编写整个游戏,还是在一个场景中包含动作脚本,并且有多个场景,或者两者的组合
假设我在我的游戏中有一个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个场景?
有人能给我一个起点吗?
谢谢我不知道有谁对这些场景有什么好说的 然而,正如您直觉所示,时间线本身是一个很好的工具,可以随着时间的推移管理Flash资产的状态。如果您使用它,您还可以获得一个隐藏的优势,即您不必下载100%的文件才能使用它(因此,您可以通过取消选中库符号上的“在N帧中导出”来减少甚至消除对预加载程序的需要 Lars非常正确地指出,了解这项技术的开发人员寥寥无几,而我所知道的正是一位能够并将帮助对探索这项技术感兴趣的人。此人现在正在帮助你。因此,如果你选择这样做,请记住,你主要依靠自己,除非我碰巧注意到你你的帖子和回复 我不赞成使用时间线脚本。我建议使用“”方法,即使用文档类来控制时间线实例 您的文档类可能如下所示:
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来改变你的功能,但是你的Main文档类(本例中的游戏)会意识到这一变化(而其他变化完全可以在不改变游戏的情况下进行)。我不知道有人对场景有什么好说的 然而,正如你直觉所示,时间线本身是一个很好的工具,用于管理你的Flash资产的状态。如果你使用它,你还可以获得一个隐藏的优势,即你不必下载100%的文件就可以使用它(因此,你可以通过取消选中“在N帧中导出”来减少甚至消除对预加载程序的需要)在你的图书馆符号上 Lars非常正确地指出,了解这项技术的开发人员寥寥无几,而我所知道的正是一位能够并将帮助对探索这项技术感兴趣的人。此人现在正在帮助你。因此,如果你选择这样做,请记住,你主要依靠自己,除非我碰巧注意到你你的帖子和回复 我不赞成使用时间线脚本。我建议使用“”方法,即使用文档类来控制时间线实例 您的文档类可能如下所示:
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来改变你的功能,但是你的Main文档类(本例中的游戏)会意识到这一变化(而其他变化可以在根本不改变游戏的情况下进行).一般来说,我会建议不要使用不同的场景构建解决方案。我认为如果你不这样做,你会更容易在SO和其他开发论坛上获得帮助。我已经专业从事ActionScript/Flash开发10多年了,从未使用过场景的概念,也没有遇到同事使用过的项目。场景如果你使用Flash作为时间线动画工具,可能会有用,但我会说,在脚本编写和游戏开发中很少用到。一般来说,我会建议不要使用不同的场景构建解决方案。我认为,如果你不使用Flash,你会更容易在SO和其他开发论坛获得帮助。我一直在做ActionScript/Flash专业开发10年以上,从未使用过场景概念,或遇到同事使用过的项目。如果使用Flash作为时间线动画工具,场景可能会有用,但我会说,脚本和游戏开发中很少使用场景。