【问题标题】:Make a child call a function from its parent AS3让孩子从其父 AS3 调用函数
【发布时间】:2015-04-09 00:24:45
【问题描述】:

所以我一直在阅读很多关于继承和循环依赖的文章,但我认为没有办法解决这个问题。对多个课程来说还是有点新意。我的文档类创建字段。我的 Field 类创建播放器并从 Tile MovieClip 推送 bitmapData。我希望玩家能够将该 bitmapData 绘制到该字段。 Engine.as(文档类):

package  {
import flash.display.MovieClip;

public class Engine extends MovieClip {

    private var field:Field;
    public static var _tilesData:Array = [];

    public function Engine() 
    {
        field = new Field();
        field.x = 0;
        field.y = 0;
        addChild(field);
    }
}

字段.as:

package  {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.BitmapData;
import flash.display.Bitmap;

public class Field extends MovieClip{

    private var player:Player;
    private var sampleTile:Tile = new Tile();

    public function Field() 
    {
        player = new Player();
        player.x = 0;
        player.y = 0;
        addChild(player);

        GetSampleTiles();
    }

    public function GetSampleTiles()
    {
        for (var i:int = 0;i < 3; i++)
        {
            sampleTile.gotoAndStop(i);

            var graphicData:BitmapData = new BitmapData(32,32);
            graphicData.draw(sampleTile);

            Engine._tilesData.push(graphicData);
        }
    }

    public function DrawATile(tileToDraw:BitmapData)
    {
        var newTile:Bitmap = new Bitmap(tileToDraw);
        newTile.x = player.x;
        newTile.y = player.y;
        addChild(newTile);
    }
}

} 玩家身份:

package  {

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.BitmapData;
import flash.display.Bitmap;

public class Player extends MovieClip 
{
    public var _inp:Input = new Input();

    public function Player() 
    {
        addChild(_inp);
        addEventListener(Event.ENTER_FRAME, HandleKeys);
    }

    public function HandleKeys(e:Event)
    {
        if(_inp.keyUp)
        {
            y -= 32;
        }
        if(_inp.keyDown)
        {
            y += 32;
        }
        if(_inp.keyLeft)
        {
            x -= 32;
        }
        if(_inp.keyRight)
        {
            x += 32;
        }
        if(_inp.keySpace)
        {
            parent.DrawATile(Engine._tilesData[0]);
        }
    }
}

}

还有比我看到的更好的方法吗?当我将 DrawATile 函数放入 Player.as 时,它可以工作......但瓷砖会随着播放器移动。

【问题讨论】:

  • 呃……我一直在这样做。我觉得好傻parent.addChild(newTile); 掌心
  • 那么这个问题已经回答了吗?如果是这样,请创建一个您为解决此问题所做的答案并将其标记为正确。别担心这只是学习的一部分,我今天搞砸了代码,感觉自己像个白痴,但你越做越好。

标签: actionscript-3


【解决方案1】:

我将 DrawATile 函数放在 Player.as 中,并在其中将 newTile 添加到父级中,就像这样 - parent.addChild(newTile)。这样,它将它添加到其父对象而不是自身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多