动作脚本 3. 将影片剪辑分配给其他影片剪辑

Posted

技术标签:

【中文标题】动作脚本 3. 将影片剪辑分配给其他影片剪辑【英文标题】:Action Script 3. Assign Movie Clips to other Movie Clips 【发布时间】:2015-04-24 10:36:39 【问题描述】:

所以我正在创建游戏,其中将显示带有活动国家的世界地图作为按钮,并且在屏幕顶部应该随机弹出应该分配给特定国家的产品。游戏的思路是玩家应该回答这个产品是哪个国家的,如果回答正确应该弹出指定国家的其他产品。

所以我必须将每个国家和产品创建为电影剪辑,如何为每个产品分配正确的国家?如果国家点击它应该检查产品是否正确。

我需要将所有国家/地区放在一个阵列中,将产品放在另一个阵列中吗?只是我很困惑如何进行检查。

package 

    Import Object1;
    Import Object2;
    //all objects...
    Import Canada;
    //all countries...

    public class MapGame extends MovieClip
    
    private var object1:Object1;
    private var object2:Object2;
    private var object3:Object3;
    private var object4:Object4;
    private var object5:Object5;
    //etc.....

    private var canada:Canada;
    private var lithuania:Lithuania;
    private var uk:UK;
    private var italy:Italy;
    //etc.....

        private function CreateMap()
        
            //Here should be code to add countries as buttons
        
        private function SpawnProduct()
        
            //Here should be code to spawn random Object
        
        private function CheckProducts()
        
            // Here should be checking If products correct.
        

还应该能够将多种产品分配到一个国家/地区。

【问题讨论】:

【参考方案1】:

我会尽力帮助你的。

首先让我们创建两个对象。

private var _countries:Object = ;
private var _objects:Object = ;

_countries 将对象分配给国家。示例:

_countries[USA] = [object1, object2, object3];

因此,USA 包含三个对象。

对象也一样:

_objects[object1] = [USA, Italy, UK];

接下来。这是一个将对象分配给国家/地区的函数,反之亦然。

public function assignCountryAndObject(country:MovieClip, object:MovieClip):void

    if (_countries[country] is Array && _countries[country].indexOf(object) == -1)
        _countries[country].push(object);
    else
        _countries[country] = [object];

    if (_objects[object] is Array && _objects[object].indexOf(country) == -1)
        _objects[object].push(country);
    else
        _objects[object] = [country];

所以你可以这样调用这个方法:

assignCountryAndObject(country1, obj3);
assignCountryAndObject(country2, obj2);
assignCountryAndObject(country2, obj4);
assignCountryAndObject(country2, obj2);
assignCountryAndObject(country3, obj4);
assignCountryAndObject(country3, obj1);
assignCountryAndObject(country3, obj2);

接下来的两个函数用于获取一个对象的所有国家或该国家的所有对象。

public function getCountriesOfObject(object:MovieClip):Array

    return _objects[object];


public function getObjectsOfCountry(country:MovieClip):Array

    return _countries[country];

您可以使用下一个功能进行检查:

这个函数检查对象是否属于国家:

public function isObjectBelongsCountry(object:MovieClip, country:MovieClip):Boolean

    return _objects[object].indexOf(country) != -1;

这个函数检查国家是否属于一个对象:

public function isCountryBelongsObject(country:MovieClip, object:MovieClip):Boolean

    return _countries[country].indexOf(object) != -1;

【讨论】:

【参考方案2】:

我建议使用一组包含有关国家及其产品的所有必要信息的项目。该数组的每个元素都应包含与该国家相关的国家名称和产品数组。这是我所说的一个例子:

package  

    import flash.display.MovieClip; 

    public class Main extends MovieClip 
    
        //Array that holds a country name and the array of products associated woth that country 
        //(each item is an instance of Item.as)
        private var allItems:Array;

        public function Main() 
        
            this.allItems = new Array();

            //Create all items
            var item1:Item = new Item("Italy", ["Pizza", "Pasta"]);
            var item2:Item = new Item("Lithuania", ["Šaltibarsčiai"]);

            //Push those items into main allItems array
            this.allItems.push(item1, item2);

            //This traces all information in allItems array
            for(var i:int = 0; i < allItems.length; i++)
            
                trace("Country:", allItems[i].country + ", " + "Products:", allItems[i].products);
            
        
    

还有 Item.as 类:

package  

    import flash.display.MovieClip;

    public class Item
    
        public var country:String;
        public var products:Array;

        public function Item(country:String, products:Array) 
        
            this.country = country;
            this.products = products;
        
    

我还应该补充一点,国家和产品不一定是 String 的。它们可以是您想要的任何东西,例如电影剪辑。

Linkėjimai :)

【讨论】:

以上是关于动作脚本 3. 将影片剪辑分配给其他影片剪辑的主要内容,如果未能解决你的问题,请参考以下文章

将通过编辑器添加的影片剪辑放在前面

使用带有 stage3d 的 Flash 影片剪辑

访问链接属性未定义的影片剪辑

动作脚本 3 event.target

ActionScript:符号影片剪辑不循环

子数涵数·Flash——影片剪辑的其他操作