Actionscript 3 动作脚本制作游戏介绍
我在全班做游戏。所以时间线是空的。但是我想为游戏介绍使用另一个场景,在介绍之后,它将进入我创建的游戏主菜单。有人有主意吗?从一周前开始我就没找到过。。。我真的不知道如何从类中的代码操作场景。请帮忙。谢谢 以下是主要代码:Actionscript 3 动作脚本制作游戏介绍,actionscript-3,Actionscript 3,我在全班做游戏。所以时间线是空的。但是我想为游戏介绍使用另一个场景,在介绍之后,它将进入我创建的游戏主菜单。有人有主意吗?从一周前开始我就没找到过。。。我真的不知道如何从类中的代码操作场景。请帮忙。谢谢 以下是主要代码: package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.display.MovieClip; publi
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.MovieClip;
public class Main extends Sprite
{
public var field:Array;
//CALL EVERY CLASS
public var _money:Money = new Money();
public var _gold:Gold;
public var _hero:Hero;
public var _enemy:Enemy;
private var _pause:MovieClip = new Pause();
private var pauseLayer:MovieClip = new PauseLayer();
private var ts:TitleScreen;
public function Main():void
{
ts = new TitleScreen();
addChild(ts);
}
//GAME FUNCTION
public function onStage():void
{
_hero = new Hero(this);
_enemy = new Enemy(this);
_gold = new Gold(this);
setupField();
_gold.goldSet(stage);
_money.addText(stage);
_hero.displayHero(stage);
_enemy.displayEnemy(stage);
setPause();
_pause.addEventListener(MouseEvent.CLICK, pauseGame);
}
private function setPause():void
{
addChild(_pause);
_pause.x = 620;
_pause.y = 50;
_pause.buttonMode = true;
}
private function pauseGame (e:MouseEvent):void
{
stage.frameRate = 0;
addChild(pauseLayer);
pauseLayer.alpha = 0.5;
pauseLayer.parent.setChildIndex(pauseLayer,numChildren-1);
}
//SET UP FIELD ARRAY
private function setupField():void
{
var fieldSprite:Sprite=new Sprite();
addChild(fieldSprite);
fieldSprite.graphics.lineStyle(4);
field=new Array();
for (var a:int=0; a<6; a++)
{
field[a]=new Array();
for (var b:int=0; b<10; b++)
{
field[a][b]=0;
}
}
//DRAW FIELD
for (var i:int=0; i<5; i++)
{
for (var j:int=0; j<9; j++)
{
fieldSprite.graphics.drawRect(75+65*j,50+75*i,65,75);
}
}
}
}
}
最简单的方法是使用wrapper
Sprite
s来保存您可能希望作为一个整体可用的每一组对象,比如主菜单、升级、故事情节等。然后您只需将它们移入和移出显示列表,以显示与负责转换流的main
类对应的“场景”。但要做到这一点,您需要将游戏的核心功能从Main
类转移到saygame
类。这就是我在游戏中做同样事情的方式:
public class Main extends MovieClip {
private var so:SharedObject;
private var ui:UserInterface;
private var ts:TitleScreen;
private function init(e:Event = null):void
{
ui = new UserInterface();
ts = new TitleScreen();
ts.newButtonClicked = newGame;
ts.loadButtonClicked = loadGame;
ui.gotoMapBehavior = wentToMap;
addChild(ts);
}
这里,UserInterface
是一个包含游戏逻辑的类,TitleScreen
是一个主菜单类。这些函数是Main
中的回调函数:
private function newGame():void {
removeChild(ts); // hide title
if (!contains(ui)) addChild(ui);
SoundManager.playMusic(SoundManager.MUSIC_LEVELSELECT);
}
private function loadGame():void {
newGame();
ui.loadBattle(); // this should make UI load the battle from shared object (either supplied or received by itself)
}
private function wentToMap():void {
// we have just executed "go to map" from UI
removeChild(ui);
addChild(ts);
checkSO();
SoundManager.playMusic(SoundManager.MUSIC_INTRO);
}
实际的游戏逻辑根本不与
Main
交互,除了整个项目中常见的共享对象,但通常通过SharedObject.getLocal(someName)
接收链接。代码很难看,但对初学者来说可以。将游戏另存为SWF,并使用timeline动画介绍制作另一个项目。当介绍结束时,让你的项目加载你的游戏<代码>加载程序类可以加载其他swf文件。因此,您不需要编辑游戏类。如何将ts.newButtonClicked定义为鼠标单击事件?我的意思是当它被点击时,它会进入主类中的新游戏功能,对吗?我已经编辑了我的帖子,玩游戏的按钮现在没有出现。有什么问题吗?谢谢你的回答!这是类的公共属性,不公开底层按钮逻辑。向类中添加public var newButtonClicked:Function
,然后在类中为某个按钮添加事件侦听器,代码为:if(newButtonClicked)newButtonClicked()代码>这将调用您将使用0个参数分配的任何回调(您必须自己描述每个回调的数据流,有些回调可能需要通过0传递数据。我从来不知道该函数也可以是一个var。因此事件侦听器将是newButtonClicked.addEventListener(MouseEvent.event,Play)?或者怎么做?从我编辑的代码来看,为什么playBtn没有打开?你能解释一下吗?很抱歉重播太晚了。谢谢!你从来没有调用过addChild(playBtn)
:)不,add event listener语句保持原样,行if(newButtonClicked!=null)newButtonClicked()
被添加到播放功能中。哇,一切都正常!谢谢!事实上,还有一件事我需要知道,我想我会把介绍场景制作成动画,从时间线开始,用基本的粗花呢和东西。我是不是应该把它做成电影剪辑,在开始时调用它,然后在它进入主菜单时删除它?或者有没有更好的方法呢?我还没有学会如何加载swf。你能给我举个例子吗?好的,这里是@user3411184,加载的SWF和阶段访问有一些问题,加载的SWF有一个单独的阶段,还有一些安全问题,所以你最好还是使用一个SWF,因为它更容易调试。另外,从Main
重新定位游戏功能最终将帮助您规划类结构,并可能使您的游戏可扩展,例如,如果您希望添加屏幕。谢谢您的解释。我认为是这样。有很多。fla是令人困惑的
private function newGame():void {
removeChild(ts); // hide title
if (!contains(ui)) addChild(ui);
SoundManager.playMusic(SoundManager.MUSIC_LEVELSELECT);
}
private function loadGame():void {
newGame();
ui.loadBattle(); // this should make UI load the battle from shared object (either supplied or received by itself)
}
private function wentToMap():void {
// we have just executed "go to map" from UI
removeChild(ui);
addChild(ts);
checkSO();
SoundManager.playMusic(SoundManager.MUSIC_INTRO);
}