Uni заставил меня некоторое время заниматься другими вещами, но, наконец, я могу вернуться к своему игровому проекту.
У меня это работает. Я использовал метод Хуана Пабло Калифано. Сначала я использовал Генри Кука, потому что хотел создать файл .AS для каждой еды (т.е. apple.as, cereal.as, bread.as, oranges.as). С помощью метода Генри Кука я создал
`var foodTypeLimit: Object = new Object ();
foodTypeLimit [ "зерно"] = 2;
foodTypeLimit [ "плод"] = 2;
И var foodTypeCount: Object = new Object ();
и т. д.
`
Для каждого типа пищи. Затем использовал:
var type:String = getFoodTypeForObject( currMc );
if( foodTypeCount[ type ] < foodTypeLimit[ type ] ){
items.push( currMc );
foodTypeCount[ type ]++;
} else {
// throw error
}
Как и предполагалось. Функция вернула строку и альт она работала нормально. Однако, поскольку мои переменные foodTypeCount (например, foodTypeCount ["grain"] = 0; ) были внутри функции, каждый раз, когда вызываемая ими функция была установлена в 0, приращение никогда не превышалось при каждом вызове. Итак, я подумал, хорошо, я помещу эти переменные foodTypeCount вне функции вместе с созданием var foodTypeCount: Object = new Object (); НО НЕТ, я продолжал получать:
Error #1120: Access of undefined property foodTypeObject.
Даже при том, что это было прямо по декларации. Я понимаю, что я слишком нуб, чтобы понять, почему это так. Во всяком случае, по этой причине (отсутствие приращения, которое было необходимо для этой функции), я укусил пулю и использовал путь Хуана Пабло Калифано.
Сначала я записал классы так:
public class Bread extends MovieClip implements Grain {
public function Bread() {
super();
}
public function someCommonMethodToAllGrains():void {
}
}
А потом добавил интерфейс
`public interface Grain {
function someCommonMethodToAllGrains():void;
}
`
А теперь моя функция выглядит примерно так:
if(currMC is Grain){
if(grainCount<2){
addProductToBasket();
grainCount++;
} else {
notAllowed("Grain");
}
}
function addProductToBasket(){
removeChild(currMC);
basketArray.push(currMC);
//remove listeners set mc to null etc
}
function notAllowed(foodType:String){
error.text="Sorry but you already have 2"+foodType+"products";
}
Я пытался включить все это в выключатель. Например:
switch(currMC){
case is Grain:
//do this
break;
}
Вышеуказанная реализация не работает. Возможно, операторы switch, вероятно, не предназначены для такого использования. ИДК. : S
В любом случае, спасибо за действительно замечательные ответы, ребята, это мой любимый сайт, где можно найти ответы на вопросы о жизни во вселенной и во всем.