动作脚本 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. 将影片剪辑分配给其他影片剪辑的主要内容,如果未能解决你的问题,请参考以下文章