gpt4 book ai didi

actionscript-3 - as3 : How to organize classes

转载 作者:行者123 更新时间:2023-12-04 05:54:31 25 4
gpt4 key购买 nike

这是一个有点基本的问题。但是,我不明白如何解决它。我有一个包含多个实体的应用程序。例如派克 <-- 鱼 --> 鲨鱼。其中 fish 是基类。

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

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)稍微改变行为(鲨鱼仍然需要知道方向,但可能使用另一种速度方法)

3)定义大小属性(例如,根据鲨鱼的大小,鲨鱼会更强或更弱)

问题是:

我如何定义鲨鱼...作为鱼的子类?或者最好从 Sprite 继承它?

我认为从 Fish 进行子类化会更自然,但在这种情况下,我不明白如何覆盖 Fish(例如图像)的视觉呈现,因为覆盖变量是不可能的。

另一方面,如果我将使用 FlxSprite 作为基类,重新定义演示文稿会很容易,但在这种情况下,我将无法重用运动代码(例如,鱼知道向哪个方向游动)。 .

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

最佳答案

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

Fish :

public var image:Class;

Shark :
[Embed(source="./resources/shark.png")]
private const _sharkImage:Class;

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

您也可以使用 setter/getter 。

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

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

然后在 Shark :
[Embed(source="./resources/shark.png")]
private const _sharkImage:Class;

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

我认为覆盖 getter 和 setter 对您来说是一个不错的选择。然后,您可以更改每个物种的行为速度/大小。

关于actionscript-3 - as3 : How to organize classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9682371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com