Я создал статический класс во Flash, который работает как делегат инвентаря для этой игры. Тем не менее, Flash продолжает выдавать мне эту ошибку:
ArgumentError: Error #1063: Argument count mismatch on Inventory(). Expected 1, got 0.
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at Main()
Я просмотрел код и не могу найти источник ошибки. Когда я запускаю фильм в режиме отладки, он говорит мне, что ошибка может быть найдена в строке 8 в Main (), который является классом документа, и в настоящее время не содержит кода, кроме пустого конструктора. В строке 8 начинается конструктор.
Класс Inventory выглядит так:
package {
import flash.display.MovieClip;
import flash.utils.getDefinitionByName;
public class Inventory extends MovieClip{
private static var instance:Inventory;
private var invItemQuant:int;
public function Inventory(pvt:PrivateClass){
invItemQuant = 0;
}
public static function getInstance():Inventory{
if(Inventory.instance == null){
Inventory.instance = new Inventory(new PrivateClass());
}
return Inventory.instance;
}
//Usage: x.addToInventory(itemName);
//After: item has been added to the inventory
public function addToInventory(itemName:String){
var itemType:Class = getDefinitionByName(itemName) as Class;
var theItem:MovieClip = new itemType();
theItem.name = itemName;
invItemQuant++;
MovieClip(getChildByName("itemSlot" + invItemQuant)).fillSlot(theItem);
}
//Usage: x.removeFromInventory(itemName);
//Before: item is contained in inventory
//After: item has been removed from the inventory
public function removeFromInventory(itemName:String){
for(var i:int = 1; i <= invItemQuant; i++){
MovieClip(getChildByName("itemSlot" + i)).emptySlot(itemName);
}
invItemQuant--;
}
//Usage: q = getItemQuant();
//Before: q is int
//After: the number of items in inventory is in q
public function getItemQuant():int{
return invItemQuant;
}
}
}
class PrivateClass {
public function PrivateClass(){
trace("PrivateClass called");
}
}
Я сделал его статичным, чтобы я мог получить к нему доступ со сцены и добавить предметы в инвентарь. Затем Inventory MovieClip состоит из одинаково больших слотов с именами itemSlot1, itemSlot2 и т. Д.
Слоты инвентаря затем связаны с этим классом:
package {
import flash.display.MovieClip;
public class InvSlot extends MovieClip {
public function InvSlot() {
}
//Usage: x.fillSlot(itemName);
//Before: slot is empty
//After: object theItem has been put into the slot
public function fillSlot(theItem:MovieClip){
this.addChild(theItem);
}
//Usage: x.emptySlot(itemName);
//Before: movieclip itemname may exist in this object
//After: movieclip itemname does not exist in this object
public function emptySlot(itemName:String){
}
}
}
Я еще не создал метод emptySlot. Метод fillSlot просто добавляет полученный мувиклип к себе.
Наконец, у меня есть stageItem, который при взаимодействии (в данный момент только что нажал) должен быть добавлен в инвентарь.
package {
import flash.events.MouseEvent;
public class StageItemRubberChicken extends StageItemBase{
public function StageItemRubberChicken() {
description = "It's a chicken, of the rubbery kind";
descriptiveName = "Rubber Chicken";
itemName = "ItemRubberChicken";
this.addEventListener(MouseEvent.CLICK, interactWithItem, false, 0, true);
}
private function interactWithItem(e:MouseEvent){
var mainInventory:Inventory = Inventory.getInstance();
mainInventory.addToInventory(itemName);
this.parent.removeChild(this);
}
}
}