0

我正在为 uni 制作游戏作为我单位的一部分,但我不知道最好的方法,因为我是 AS3 的新手。我有 8 位客人参加聚会,每个人都有不同的个性、爱好和兴趣。游戏是这样运行的,如果你点击一个客人并点击舞台上的任何地方,那么那个客人就会走向它。如果您点击一位客人,然后点击另一位客人,您首先点击的客人将向您第二次点击的客人移动,当他们靠近时,他们会互相交谈。

所有 8 位客人在移动方面将共享相同的功能和代码。我已经完成了点击和移动部分,但它是在 Guest01 类上完成的,但所有的客人都会有相同的。我应该为每个客人创建 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;
            }

        }
    }
}
4

2 回答 2

1

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

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

我有 8 位客人参加聚会,每个人都有不同的个性、爱好和兴趣。

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

希望对您有所帮助。

于 2012-12-29T01:45:04.217 回答
0

只是试图从不同的帖子中回答您的问题。您需要将游戏分解为简单的动作,例如将用户从一个地方移动到另一个地方,计算用户想要移动到另一个用户时应该移动到的偏移位置,计算用于显示用户爱好和兴趣的元素的位置等。

你以前用过面向对象的语言吗?在进行诸如构建游戏之类的项目之前,您必须牢牢掌握一些基本原理。根据您上一篇文章,您的下一个重点应该是以下方法。

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

  1. 在 clickToMove() 函数内部(或任何你称之为的函数)。编写一个 if 测试以查看重定位单击选择的是空位置还是用户在其上的位置。如果用户在场,您需要编写另一种方法来偏移要移动的玩家的位置,否则玩家将相互叠加。

我现在正在登机,很快会再次发布

于 2012-12-30T01:42:13.953 回答