制作这款游戏​​AS3的最佳方式

时间:2012-12-29 01:23:07

标签: actionscript-3

我正在制作一个游戏作为我的单位的一部分,但我不知道这样做的最佳方式,因为我是AS3的新手。我在一个不同的聚会中有8位客人,并且有不同的个性,爱好和兴趣。游戏就像这样,如果你点击一个客人并点击舞台上的任何地方,那么该客人将朝着它移动。如果您单击某个访客,然后单击另一个访客,则您首先单击的访客将移向您单击的访客,当他们关闭时,他们将相互通话。

所有8位客人将在移动方面共享相同的功能和代码。我已完成点击和移动部分,但它是在Guest01课程上完成的,但所有来宾都会有相同的。我应该为每个guest虚拟机创建8个不同的类,还是应该使用数组。我真的不知道如何开始这个。以下是点击和移动的代码:

package 
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.*;

    public class Guest01 extends MovieClip
    {
        var walkSpeed:Number = 5;
        var oldPosX;
        var oldPosY;

        var myGlow:GlowFilter = new GlowFilter();

        public function Guest01()
        {
            addEventListener(MouseEvent.MOUSE_OVER, addGlow);
        }

        public function addGlow(event:MouseEvent):void
        {
            filters = [myGlow];
            addEventListener(MouseEvent.MOUSE_OUT, removeGlow);
            addEventListener(MouseEvent.CLICK, ready);

        }

        function removeGlow(event:MouseEvent):void
        {
            filters = [];
        }

        public function ready(event:MouseEvent):void
        {
            filters = [myGlow];
            stage.addEventListener(MouseEvent.MOUSE_DOWN, walk);
            removeEventListener(MouseEvent.MOUSE_OUT, removeGlow);
        }

        function walk(event:MouseEvent):void
        {
            oldPosX = parent.mouseX;
            oldPosY = parent.mouseY;
            rotation = Math.atan2(oldPosY - y,oldPosX - x) / Math.PI * 180;
            filters = [];
            stage.removeEventListener(MouseEvent.MOUSE_DOWN, walk);
            stage.addEventListener(Event.ENTER_FRAME, loop);
        }

        function loop(event:Event):void
        {
            var dx:Number = oldPosX - x;
            var dy:Number = oldPosY - y;
            var distance:Number = Math.sqrt((dx*dx)+(dy*dy));
            if (distance<walkSpeed)
            {
                // if you are near the target, snap to it
                x = oldPosX;
                y = oldPosY;
                removeEventListener(Event.ENTER_FRAME, loop);

            }
            else
            {
                x = x+Math.cos(rotation/180*Math.PI)*walkSpeed;
                y = y+Math.sin(rotation/180*Math.PI)*walkSpeed;
            }

        }
    }
}

2 个答案:

答案 0 :(得分:1)

  

我已经完成了点击和移动部分,但它是在Guest01类上完成的,但是所有的guest都会有相同的。我应该为每个客人创建8个不同的类,还是应该使用数组。

您不应该为8个不同的Guest创建8个不同的类,但是您应该尝试为不同的Guest重用这些类和方法。

  

我在一个不同的聚会中有8位客人,并且有不同的个性,爱好和兴趣。

您可能希望创建一个 Guest 类,并将所有属性(个性,爱好等)保留为类中的变量。您必须根据访客选择(或随机)的配置文件在开始时为不同的Guest初始化Class。 Guest的所有方法(如walk,glow等)都是类本身的方法。

希望能给你一些指导。

答案 1 :(得分:0)

试着从另一个帖子回答你的问题。您需要将游戏分解为简单的操作,例如将用户从一个地方移动到另一个地方,如果他们想要移动到另一个用户,计算用户应移动到的偏移位置,计算用于显示用户爱好和兴趣的元素的位置等,

你以前用面向对象语言编程了吗?在开始构建游戏之类的项目之前,您必须牢牢掌握一些功能。根据您的上一篇文章,您的下一个重点应该是以下方法。

由于您已经编写了一个基于用户点击重新定位播放器的功能,您应该编写以下功能:

  1. 在clickToMove()函数内部(或者你称之为的任何函数)。编写if测试以查看重定位点击是否选择空位置或具有用户的位置。如果用户在场,你需要编写另一种方法来抵消要移动的玩家的位置,否则玩家将在彼此之上分层。
  2. 我正在登机,现在很快就会再次发布

相关问题