首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >as3:如何组织课程

as3:如何组织课程
EN

Stack Overflow用户
提问于 2012-03-13 18:33:48
回答 1查看 389关注 0票数 2

这是一个有点基本的问题。但是,我无法理解如何解决它。我有一个应用程序,它有几个实体。例如梭鱼<--鱼-->鲨鱼。其中fish是基类。

我正在做一些湖,所以我的鱼类的所有实例只能在一些边界内移动。更重要的是,它们都是随机创建在湖的一个边缘,并根据它们所在的边缘游到另一个边缘。下面是它查找基类的方式:

代码语言:javascript
运行
复制
public class Fish extends FlxSprite
{

    [Embed(source="./resources/Elipse.png")]
    public var image:Class;

    // Variable which stores the direction of item movement (false - Move right)
    // (true - Move Left)
    private var movement:Boolean;

    public function Fish(x:int, y:int)
    {
        super(x, y, image);

        // Move right
        if ( x < 5 )
        {
            movement = false;
        }
        else
        {
            movement = true;
        }
    }



    public override function update():void
    {
        if( movement )
        {
            this.velocity.x -= 3;
        }

        else
        {
            this.velocity.x += 3;
        }

        super.update();
 }

现在我想扩展这个模型,为fish类添加一些额外的行为。我想做一条鲨鱼。为此,我需要:

1)将抽象的鱼图像替换为鲨鱼图像

2)稍微改变一下行为(shark仍然需要知道方向,但可能会使用另一种速度的方法)

3)定义大小属性(例如,基于大小,鲨鱼会更强或更弱)

问题是:

我该如何定义鲨鱼..。作为Fish的子类?或者从雪碧子类化它更好?

我认为从Fish派生子类会更自然,但在这种情况下,我不知道如何覆盖Fish的视觉表示(例如图像),因为不可能覆盖变量。

另一方面,如果我使用FlxSprite作为基类,将很容易重新定义表示,但在这种情况下,我将无法重用运动代码(例如,这样鱼就知道往哪个方向游了)……

我知道这个问题有点难以理解。如果有任何问题,我很乐意重新定义它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-13 18:52:51

您不能覆盖变量(这没有任何意义),但您可以在构造函数中设置它的值。

Fish

代码语言:javascript
运行
复制
public var image:Class;

Shark

代码语言:javascript
运行
复制
[Embed(source="./resources/shark.png")]
private const _sharkImage:Class;

public function Shark(x:int, y:int)
{
  image = _sharkImage;
  super(x, y);
}

您也可以使用getter。

Fish

代码语言:javascript
运行
复制
[Embed(source="./resources/Elipse.png")]
public var _image:Class;

public function get image():Class
{
  return _image;
}

然后在Shark

代码语言:javascript
运行
复制
[Embed(source="./resources/shark.png")]
private const _sharkImage:Class;

override public function get image():Class
{
  return _sharkImage;
}

我认为重写getter和setter对你来说是一个很好的选择。然后,您可以更改每个物种的行为速度/大小。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9682371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档