Coder Social home page Coder Social logo

anthill-framework's Introduction

Anthill Game Framework

Important thing!

Development of the Anthill Game Framework is stopped and new updates is not planned. But if you're still using this framework and you have questions or issues, you can contact with me for support via email ant.karlov [at] gmail.com

What is Anthill?

Anthill Game Framework (Anthill) - is a small framework for creating great games on Flash Action Script 3. The framework is inspired by Flixel. Unfortunately, at the moment Anthill does not use the GPU for graphics render, and the main emphasis is put on the fast software render and convenience of creating games.

Key feature of the Anthill it's rasterization of vector graphics "on the fly", which offers high performance and small size of Flash games.

More info about Anthill

anthill-framework's People

Contributors

antkarlov avatar creativcheck avatar grinchakyaroslav avatar timiks avatar vforsh avatar vgpechenkin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

anthill-framework's Issues

Расширить функционал AntLabel

В AntLabel отсутствуют очень важные элементыTextFormat а именно italic,leading ,letterSpacing и некоторые другие. Думаю стоит либо добавить соответствующие методы либо сделать AntLabel._textField и AntLabel._textFormat пабликами чтобы была возможность вручную манипулировать ими.

AntButton label

label который прикреплен к AntButton невозможно перемещать через изменение x и y. Я так понял это связано с updateLabel().
label.x = width * 0.5 - label.width * 0.5 + origin.x;
label.y = height * 0.5 - label.height * 0.5 + origin.y;

Возможно стоит добавить переменные вроде labelX и labelY . Тогда можно будет делать вот так:
label.x = width * 0.5 - label.width * 0.5 + origin.x + labelX;
label.y = height * 0.5 - label.height * 0.5 + origin.y + labelY;
Конечно читерски можно менять origin или добавлять свой лейбл ручками. Но не комильфо. :D
Или я что-то упустил.

AntTween removal

Антон, а почему у AntTween нет никакого метода типа destroy? Это же потенциальный memory leak, или я что-то упускаю?

goto is not allowed here

При подключении фреймворка во Flash Builder выходит ошибки 'goto is not allowed here' на строчках где указан метод goto в классе AntActor. Во FB goto выделено, как ключевое слово.

samples/src/testDrive/TestTaskManager.as fix

Строка: 309 : // То сортируем список по дистанции, с наименьшей дистанцией вперед.
Строка: 310 : dist.sortOn("dist", Array.DESCENDING);

тупо скопипастил и получил...

это сортировка по убыванию строковых значений, наверх всплывет наибольшее символьное значение дистанции, надо использовать дефолтную сортировку с указанием, что сортируются числа

Строка: 310 : dist.sortOn("dist", Array.NUMERIC );

загрузка графики, непонятный прозрачный бордюр

сейчас делая новый класс озадачивался тем что вручную составив двух актеров имею зазор там где его не должно быть... оказалось вся кешированная графика имеет большие габариты чем у исходной, к примеру мувиклип размером 7х7 имеет размер 9х9, а клип размером 64х64 после загрузки превращается в 67х67.

это какая-то производственная необходимость или баг?

AntAssetLoader::process()
строка:365:anim.makeFromMovieClip(clip);
после нее графика "прибавляет в весе" на +2 пикселя

Загрузка embed графики

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

    /**
     * Добавляет растровую картинку в очередь на кэширование.
     * 
     * <p>Если задана ширина или высота кадра, то изображение автоматически будет разрезано на кадры
     * равные заданным параметрам. Если значения высоты и ширины кадра не заданы, то будет создана 
     * однокадровая анимация содержащая в себе изображение целиком.</p>
     * 
     * @param   aGraphicClass    Класс растрового изображения.
     * @param   aKey     Имя анимации под которым будет доступна растровая копия изображения после обработки.
     * @param   aFrameWidth  Размер кадра анимации по ширине.
     * @param   aFrameHeight     Размер кадра анимации по высоте.
     * @param   aOriginX     Смещение кадров анимации по X относительно нулевой координаты.
     * @param   aOriginY     Смещение кадров анимации по Y относительно нулевой координаты.
     * @param   aBorder  Смещение списка кадров от края текстуры.
     * @param   aSpace   Расстояние между кадрами
     */
    public function addGraphic(aGraphicClass:Class, aKey:String = null, aFrameWidth:int = 0, 
        aFrameHeight:int = 0, aOriginX:int = 0, aOriginY:int = 0, aBorder:int=0, aSpace = 0):void

для чего?

в примере движка по тайловым картам, для классической тайловой карты используется тайлсет в виде анимации, где каждый кадр это тайл, к такому виду приводится практически любой тайлсет для редакторов типа tiled, что позволяет прикрутить их формат без конвертации, но зачастую в тайлсете используются эти самые отступы.

зачем приводить?

я пока не представляю как определять поверхность уровня целиком отрисованного в одном клипе без использования тайлов, он конечно затайлится с помощью AntTileMap но кромка поверхности будет во первых не во всех тайлах и во вторых внутри тайла не всегда на одном уровне. Как определять коллизии в таких раскладах...?

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

Было решено использовать карты сделанные в Tiled (первый попался)

AntButton.makeButton fix

Следующий код вызовет крит на запуске приложения

var bnt:AntButton = AntButton.makeButton("clip_mc");

Исправления в AntButton.as строка 312

было

aLabel.isScrolled = false;

стало

if (aLabel != null) aLabel.isScrolled = false;

Неверное заполнение кадров при создание анимации из изображения

В методе AntAnimation.makeFromGraphic() - строка 263:

var n:int = frames.length = numFramesX * numFramesY;

frames.length устанавливает значение длинны массива, что приводит к ошибки при frames.push():

var frames = [];
frames.length = 4;
frames.push('Hi');

trace(frames.length); // 5
trace(frames); // null, null, null, null, Hi

reset non active entity, bug?

ситуация:

создаем наследника AntEntity
в его конструкторе делаем active = visible = false;
и добавляем чилдрена add(subEntity);

если вызвать reset() для нашего класса выполнится каскадный вызов updateX() для всех его приаттаченных деток.

прецедент:

есть диалог по умолчанию невидимый и неактивный, но появляющийся по требованию в фиксированной позиции, к одному из деток диалога (фон диалога) приаттачено событие мыши onOver которое выставляет флаг что курсор над GUI, так вот после такого кода

dlg = new Dialog();
dlg.reset(10,10);

еще до появления чего либо на экране я получаю флаг активных гуев

вопрос:

мне это обходными маневрами разруливать или таки вызов апдейтов для активных деток неактивного родителя есть недочет?

AntAnimation BitmapData

AntAnimation.makeFromGraphic получает Bitmapи использует из него BitmapData. Все в порядке если ембедить растровые изображения. Но я добавляю растровые изображения из swc файла. А у них базовый класс BitmapData. Я предлагаю добавить возможность добавлять графику прямо из BitmapData. В противном случае нужно создавать отдельный класс наследуемый от Bitmap и внедрять в него битмап дату.

В методе AntAnimation.makeFromGraphic можно заменить
var pixels:BitmapData = (new aGraphic).bitmapData;
на:

var _aGraphic:Object = new aGraphic();
            var pixels:BitmapData;
            if (_aGraphic.bitmapData == null) {
                if (getQualifiedSuperclassName(aGraphic) == "flash.display::BitmapData") {
                    pixels = _aGraphic as BitmapData;
                }
            } else {
                pixels = _aGraphic.bitmapData;
            }

extentions/livinglights

а вот "капельками магии" можно наладить полноценную темноту?

бленд режим оверлей делает пелену (слой закрашенный #000000) даже при альфе == 1 прозрачной процентов на 50, а вот чтобы затемнение было 95% как?

AntLabel сбивается align

В AntLabel есть первоначальный текст и align - CENTER. Все работает. Но если второй раз изменить текст - align сбивается на LEFT.
Возможное решение - в AntLabel.text добавить строку _textField.setTextFormat(_textFormat);
Возможно это поможет также решить issue #19

Курица или яйцо... вот в чем вопрос :)

получил краш в методе состояния onLoadComplete когда попытался сделать

AntG.getCamera().setBounds(0, 0, 1112, 400);

Все дело в том что ваш AntG.switchState сначала создает и инициализирует состояние вызывая AntState.create, а только потом добавляет дефолтную камеру, что в итоге делает невозможным задать камере границы на этапе инициализации состояния, когда оно грузит графику и относительно нее настраивает камеру, разве что уже в реалтайме, где-нибудь в update через дополнительные флаги.

Тут либо убирать дефолтную камеру как недразумение однозначно потребовав, как раньше, создавать камеру каждому состоянию вручную, либо дефолтную камеру создавать до состояния, что я и сделал переставив вызов AntState.create в конец метода AntG.switchState, чтобы не было очередному пользователю повода для мытарств с дебагером.

AntAnimation.dublicateWithFrames fix

ошибка в методе

/**

  • Создает дубликат текущей анимации только с указанными кадрами.
    */
    public function dublicateWithFrames(aFrames:Array, aName:String = null, aCopy:Boolean = false):AntAnimation

строки:
322 origBmp = frames[i] as BitmapData;
...
332 newAnim.frames.push(frames[ i ]);
...
335 newAnim.offsetX.push(offsetX[ i ]);
336 newAnim.offsetY.push(offsetY[ i ]);

будут всегда копировать фреймы начиная с нулевого, с неправильным смещением

лечится заменой на
322 origBmp = frames[ aFrames[i] ] as BitmapData;
...
332 newAnim.frames.push( frames[ aFrames[i] ]);
...
335 newAnim.offsetX.push(offsetX[ aFrames[i] ]);
336 newAnim.offsetY.push(offsetY[ aFrames[i] ]);

AntAnimation.makeFromGraphic fix

было
строка 263: var n:int = frames.length = numFramesX * numFramesY;

эта строка вставляет в начало массива numFramesX * numFramesY пустых фреймов, а потом уже все остальные строкой
277: frames.push(bmpData);.

К примеру в анимации 3 кадра, тогда к концу выполнения функции массив frames == {null, null, null, obj, obj, obj} и ессно получаем крит на calcFrame() при попытке обработать нулевой объект

исправлено на
строка 263: var n:int = numFramesX * numFramesY;

isScrolled && globalXY

при isScrolled == false глобальные координаты перестают глобальными и равняются экранным

AntAnimation.createFromSprite()

из описания к методу

/**

  • Создает растровую однокадровую анимацию из указанного спрайта.
  • @param aSprite Спрайт из которого необходимо создать растровую анимацию.
    */

по факту каждый последующий вызов превращает однокадровую анимацию в многокадровую, т.к. перед frames.push(bmpData); не выполняется усечения frames

offsetX, offsetY тоже аккумулируют значения по той же причине

Расширить функционал AntMouse

Возможно стоит добавить возможность работы с контекстным меню?
Добавить туда что-то вроде:

/**
 * Меню появляющееся при нажатии правой кнопки мыши
 */
     public var contextMenu:ContextMenu;
/**
 * Меню появляющееся при нажатии правой кнопки мыши
 */
     public var contextMenu:ContextMenu;

В конструктор contextMenu = new ContextMenu();

           /**
         *  Скрывает встроенные элементы меню, которое появляется при
                 *   нажатии правой кнопки мыши.
         */
        public function hideDefaultContextMenu():void {
            contextMenu.hideBuiltInItems();
        }

А также stage.contextMenu = contextMenu;

Еще можно добавить что-то вроде addMenuItem.

        public function addMenuItem(name:String,  enabled:Boolean = false, onClick:Function = null):void {
            var menuItem:ContextMenuItem = new ContextMenuItem(name:String);
                        menuItem.enabled = enabled;
                        if (menuItem.enabled) {
menuItem:ContextMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, onClick:Function);
                        }
                contextMenu.customItems.push(menuItem);
        }

P.S: Набирал в браузере возможны ошибки.

AntSound.play

При вызове AntSound.play не учитывается аргумент aPosition. Проигрывание звука начинается всегда с 0 позиции.

AntLabel.align bag?

в таком коде

var label:AntLabel = new AntLabel("system");
label.text = "0";
label.width = 30;
label.align = AntLabel.CENTER; // при любом значинии

выравнивание по левому краю

Избыточные расчеты при движении камеры

столкнулся с моментом, когда камера дрожит следуя за персонажем, оказалось все очень просто и косяк в скачках плавающей точки, при копании исходника нашелся конечно флажок roundToIntPosition, но положение это исправило не сильно и вот такой код конечно красивее

AntG.getCamera().follow(hero, AntCamera.STYLE_HORIZONTAL);
AntG.getCamera().roundToIntPosition = true;

но в плане качества, против вот такого

override public function update():void
{
    AntG.getCamera().focusOn( int(hero.globalX), int(hero.globalY) );
}

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

P.s. подключился к гитхаб, могу вносить правки, если будет одобрено

AntLabel.autosize bag?

может я не так что делаю, но попробовал дать метке размер шрифта больший чем тот что по умолчанию и споткнулся об предел размера 11, больший размер начинает обрезаться, autosize по умолчанию true, принудительное выставление в true тоже результатов не дает.

для вывода используется встроенный в движок шрифт.

поведение isScrolled

перешел на версию из репозитория и все элементы с isScrolled == false опять "приклеились" к своим начальным координатам, а дебагер сказал что они (!) isScrolled == true, в итоге оказалось что из AntEntity.add() пропала строчка:

aEntity.scrollFactor.copyFrom(scrollFactor);

итак, теперь сущности не наследуют атрибут скролирование и теперь каждый "сам за себя", вопрос - это так и должно быть или случайно удален код?

Mask and Mouse

Hi ,

Thank you so much for making such a wonderful game API. I have some questions when using anthill framework. Sorry for my English , I don't know Russian either. And here are my 2 questions:

Is there a way to implement the mask to mask the actor?

If the game is loaded from another larger swf and it's position is not set as the top left of the loader swf, the ant button's clicking region will be off the correct position. Is there a way to avoid this ?

Thank you so much and wish you have a wonderful day.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.