Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 动作脚本制作游戏介绍_Actionscript 3 - Fatal编程技术网

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
类转移到say
game
类。这就是我在游戏中做同样事情的方式:

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);
    }