Как сделать игру hous ie / bin go во Fla sh AS3 - PullRequest
1 голос
/ 26 марта 2020

Это показывает ошибку, когда написано, что у этого сценария есть пакет, который не может быть вложенным, как я могу решить проблему. Если нет, может кто-нибудь дать мне новый код, чтобы я мог попытаться создать новый файл? У меня есть этот файл в предыдущем стеке AS3 Bin go генератор билетов

, но я не могу понять, как его использовать.

package  {
import flash.display.Sprite;
import flash.text.TextField;

public class Main extends Sprite{

    public var boards:Array = new Array();
    private static const AMAUNT_BOARDS:uint = 6;
    private static const NUMBER_FIELD_SIZE:uint = 20;

    public function Main() {


        for(var i:uint = 0; i < AMAUNT_BOARDS; i++)
        {
            var numbers:Array = genNumbers();
            numbers = deleteFields(numbers);
            var board:Sprite = getBoard(numbers);
            board.y = NUMBER_FIELD_SIZE * 4 * i;
            boards.push(board);
            addChild(board);
        }           
    }

    //generates a 2 Dimensional Array (3x9) with TextFields
    //populates the according Numbers and returns a board Sprite
    private function getBoard(n:Array):Sprite
    {
        var s:Sprite = new Sprite();
        var a:Array = new Array();
        for(var i:uint = 0; i < 3; i++)
        {
            var b:Array = new Array();
            for(var k:uint = 0; k < 9; k++)
            {
                //create TextFields
                var tf:TextField = new TextField();
                tf.x = k * NUMBER_FIELD_SIZE;
                tf.y = i * NUMBER_FIELD_SIZE;
                tf.border = true;
                tf.width = NUMBER_FIELD_SIZE;
                tf.height = NUMBER_FIELD_SIZE;                  

                if(n[k][i] != 0) // adds the number if the value isn't 0
                    tf.text = n[k][i]; // Note that i am switching k & i because the number Array is 9x3

                b.push(tf);
                s.addChild(tf);
            }           
        }       
        return s;
    }

    // Turns 4 random numbers out of the lines into 0 And returns the Array
    private function deleteFields(a:Array):Array
    {
        for(var i:uint = 0; i < 3; i++)
        {
            var r:RandomPlus = new RandomPlus(8,0);
            for(var k:uint = 0; k < 4; k++)
            {
                    var t:uint = r.getNum();
                    a[t][i] = 0;
            }
        }           
        return a;
    }

    // Generates and returns a 2 Dimensional Array (9x3) with random numbers
    private function genNumbers():Array
    {
        var a:Array = new Array();
        var st:uint = 1;
        var en:uint = 9;
        for(var i:uint = 0; i < 9; i++)
        {
            var line:Array = new Array();
            var ran:RandomPlus = new RandomPlus(en,st);

            if(i == 0)//accounting for the number differnenz at start
                st--;

            if(i==7)//accounting for the number differnenz at end
                en ++;

            st += 10;
            en += 10;

            for(var e:uint = 0; e < 3; e++)
                line[e] = ran.getNum();

            a.push(line);               
        }
        return a;
    }
}

}

1 Ответ

0 голосов
/ 09 апреля 2020

TL; DR: «Главное» в определении класса может потребоваться изменить конфликт уже существующего имени. Расширяющий спрайт может потребоваться изменить для расширения мувиклипа. RandomPlus либо нужен импорт, которого у вас нет, либо его необходимо превратить в символ и экспортировать в Actionscript.

Хорошо, поэтому несколько вещей:

Если вы действительно помещаете код в область кода стадии, то вы не можете использовать закрытый идентификатор.

Если RandomPlus не является объектом, который вы определили на стадии, это, вероятно, либо не метод, который вы можете использовать, либо у вас нет правильный импорт для него. Посмотрите, что нужно импортировать для RandomPlus или если это объект, определенный на стадии, тогда вам может понадобиться превратить его в символ или, если вы уже экспортировали его в fla sh ActionScript, я думаю. Для этого необходимо установить флажок в середине страницы создания символа. Когда вы сделаете это, вы всегда получите ошибку, но не волнуйтесь, это нормально.

В-третьих, я никогда не расширяю спрайт в определении класса, я всегда расширяю movieclip (не уверен капитализации, но вы можете посмотреть это). Вы также можете столкнуться с ошибкой при использовании «Main» в качестве имени, потому что это может быть конфликт с именем или методом, уже определенным в fla sh в целом.

Последнее, что нужно сделать для переменной объявление (в основном только для того, чтобы сделать код более читабельным). Хотя хорошо, когда вам не нужно объявлять переменные как глобальные, я бы хотел, чтобы большинство переменных находилось вверху, потому что мне нравится видеть большинство объявлений в одном пространстве. Это не обязательно, на самом деле просто личное мнение, и я знаю, что многие опытные программисты скажут делать то, что вы сделали, но если вы хотите использовать массивы в нескольких функциях, то иногда легче просто объявить их глобально, чем иметь передать миллион вещей в вызове функции, а затем выяснить, где вызываются все объявления переменных и где они передаются в качестве аргументов. Опять же, это больше выбор кодера, но вы также можете просто делать все, что вам удобнее, чем просто следовать уже изложенным правилам людьми, которые имеют больше опыта кодирования.

Еще одно дополнительное исправление для организации может называть переменные чем-то значимым, чтобы не забыть, что они все делают. Я тоже плохо разбираюсь в именах, но я думаю, что действительно лучше назвать их чем-то лучше, чем просто одна или две буквы.

Еще одна вещь, которая может помочь, - это поставить след (код или «текст»); в разных местах, чтобы увидеть, что происходит, если вы довольны компилятором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...