Sluchainik

Участник

Активность: никогда

  1. 6 г. назад
    Thu Jun 5 23:32:34 2014

    Для авторазмера я использую следующее решение:

    <script type="text/javascript">
            var canvas = document.getElementById("GameCanvas");
            
            /* autosize */
            (window.onresize = function(i) {
                    canvas.width  = window.innerWidth;
                    canvas.height = window.innerHeight;
            })();
            
            // Focus canvas
            canvas.oncontextmenu = function(){ return false; }      
            canvas.focus();
    
            // Clear console
            var textarea = document.getElementById("GameConsole");
            textarea.value = "";
    </script>

    Отличие в том, что игра подстраивается под размер браузера в реальном времени.

  2. Thu Jun 5 22:46:02 2014

    Сегодня наткнулся на непонятное поведение Monkey.
    Например у нас есть некий класс:

    Class SomeAbstract Abstract
    End Class

    От него мы наследуем некий:
    Class Some1 Extends SomeAbstract
    End Class

    Теперь собственно демонстрация непонятного момента:

    Local collection:SomeAbstract[] =[
                    New Some1(),
                    New Some1(),
                    New Some1()]

    Вроде бы всё логично. Массив, содержащий наследников SomeAbstract, но не тут то было:
    Cannot convert from Some1[] to SomeAbstract[].
    И указывает на последний элемент массива.

    Хорошо, подумал я и решил поэкспериментировать:

    Local collection:SomeAbstract[] =[
                    New Some1(),
                    New Some1(),
                    SomeAbstract(New Some1())]

    Работает ლ(ಠ益ಠლ)
    Странное дело, ладно, продолжаем. Добавим ещё одного наследника SomeAbstract:

    Class Some2 Extends SomeAbstract
    End Class

    И код нашего массива:

    Local collection:SomeAbstract[] =[
                    New Some1(),
                    New Some2(),
                    SomeAbstract(New Some1())]

    Мартышка ругается уже иначе:
    Can't balance types Some1 and Some2.
    -_____-
    Окай, продолжаем…

    Local collection:SomeAbstract[] =[
                    SomeAbstract(New Some1()),
                    SomeAbstract(New Some2()),
                    SomeAbstract(New Some1())]

    Работает.

    И вот вопрос.
    Можно заполнить массив без принудительного тайпкаста?
    Почему в первом случае понадобилось приводить только последний элемент?

    Полный код эксперимента: pastebin.com/i28X9Quq