
Мастер осади трюки
Всем привет,
мои уроки будут выходить по выходным.
Продолжим, сегодня я поделюсь некоторыми фишками которые я применил в Мастер Осады Два, и один тоже,
(по секрету а ви уже играли в crush the castle 2)
Для графики я исползую BitmapData и draw но чистый draw не подходит так как много есть статических обектив,
+ надо оптимизировать, у нас еще есть эффекты,
следовательно я использую:
— каждый обект имеет свой BitmapData и ссылку на начальную графику (без повор)
— в цикле, для видимых обектив (попадающие в экран) я вызываю метод render
и так я проверяю угл изменения и если он больше чем _minRenderAngle для обекта то перерисовую, иначи просто copyPixels,
для различных обектив _minRenderAngle разный (для маленки он больше)
в результате вызов draw проходит не каждый раз а мы знаем что copyPixels намного быстрее чем draw
Пример, draw — 90(красний), copyPixel — 710

Для ефекта отрива голови и разламывании статуй я испозую связку shape-ов

пример координат у меня сохранени в виде масива, монах
тут два шейпа. так что если надо просто «разбиваем обект»
И тут вопрос как удобно редактировать, всьо просто спасибо тут WCK ви найдете два скрипта для Flash IDE,
первий ето Decompose Polygon — он переводит все полигони в масив координат и
Clear Outline для очистки.
Самое класное что подходит к Nape тоже.
Для ефектов крови и взривов я исползую stardust particle
с етим просто для каждива ефекта например FPBloodEffect(старий код на основе Flint Particles)
результат(тут рендер сделал отдельно что б било видно партикли)

P.S. если интересно коменти снизу, много пока я держу в секрете а то нехочу прежде времени спойлерить что будет в Мастер Осади Два, игра пока на 33% готова
мои уроки будут выходить по выходным.
Продолжим, сегодня я поделюсь некоторыми фишками которые я применил в Мастер Осады Два, и один тоже,
(по секрету а ви уже играли в crush the castle 2)
Для графики я исползую BitmapData и draw но чистый draw не подходит так как много есть статических обектив,
+ надо оптимизировать, у нас еще есть эффекты,
следовательно я использую:
— каждый обект имеет свой BitmapData и ссылку на начальную графику (без повор)
— в цикле, для видимых обектив (попадающие в экран) я вызываю метод render
public function render(canvas:BitmapData, tx:Number, ty:Number):Boolean
{
if (!_render) return false;
// начальние координати
_p.x = this.px - _bmpdc.width / 2 - tx;
_p.y = this.py - _bmpdc.height / 2 - ty;
// тут пару проверок или обект видимий
if (_p.x + _bmpdc.width < 0) return false;
if (_p.x - _bmpdc.width > GameOptions.glScreenWidth) return false;
//
// разница в угле
var dd:Boolean = false;
_prevAd = _prevA - this.a;
if (_prevAd < 0) _prevAd = - _prevAd;
// проверка или нужно переисововать
if (_prevAd > _minRenderAngle)
{
_mat.a = _mat.d = 1;
_mat.b = _mat.c = _mat.tx = _mat.ty = 0;
//
_mat.translate(-_bmpd.width*.5, -_bmpd.height*.5);
_mat.rotate(this.a);
_mat.translate(_bmpdc.width*.5 + _renderOffsetX, _bmpdc.height*.5 + _renderOffsetY);
//
_bmpdc.fillRect(_bmpdc.rect, 0x00ffffff);
_bmpdc.draw(_bmpd, _mat, null, null, null, true);
//_bmpdc.draw(_bmpd, _mat);
//canvas.draw(_bmpd, _mat);
_prevA = this.a;
dd = true;
//
if(this.hasGraphic)this.graphic.alpha = 1;
}
// ну и простой копи пиксель
canvas.copyPixels(_bmpdc, _bmpdc.rect, _p, null, null, true);
return dd;
}
и так я проверяю угл изменения и если он больше чем _minRenderAngle для обекта то перерисовую, иначи просто copyPixels,
для различных обектив _minRenderAngle разный (для маленки он больше)
в результате вызов draw проходит не каждый раз а мы знаем что copyPixels намного быстрее чем draw
Пример, draw — 90(красний), copyPixel — 710

Для ефекта отрива голови и разламывании статуй я испозую связку shape-ов

пример координат у меня сохранени в виде масива, монах
[[3.5, -20.4], [4.85, -17.1], [3.5, -13.8], [0.2, -12.45], [-3.1, -13.8], [-4.45, -17.1], [-3.1, -20.4], [0.2, -21.75]],
[[0, -11.55], [7.3, -10.95], [6.35, 21.95], [-5.35, 21.95], [-6.85, -9.45]]
тут два шейпа. так что если надо просто «разбиваем обект»
И тут вопрос как удобно редактировать, всьо просто спасибо тут WCK ви найдете два скрипта для Flash IDE,
первий ето Decompose Polygon — он переводит все полигони в масив координат и
Clear Outline для очистки.
Самое класное что подходит к Nape тоже.
Для ефектов крови и взривов я исползую stardust particle
с етим просто для каждива ефекта например FPBloodEffect(старий код на основе Flint Particles)
public function FPBloodEffect(ini:Object = null)
{
super(ini);
// создаю 8 красних линий
counter = new Blast( 8 );
addInitializer( new SharedImage( new Line( 6 ) ) );
addInitializer( new ColorInit( 0xffB50510, 0xff933132) );
// тут сила вилета
var vel:Number = _ini.getNumber("velocity", 5);
var ang:Number = -2 * Math.PI / 7 * Math.random();
addInitializer( new Velocity( new DiscSectorZone(new Point( 0, 0 ), vel*20, 5, ang, -ang) ) );
addInitializer( new Lifetime( 2 ) );
addAction( new Age( ) );
addAction( new Move() );
addAction( new Fade(0.75) );
addAction( new Accelerate( -1, 10));
addAction( new RotateToDirection( ));
}
результат(тут рендер сделал отдельно что б било видно партикли)

P.S. если интересно коменти снизу, много пока я держу в секрете а то нехочу прежде времени спойлерить что будет в Мастер Осади Два, игра пока на 33% готова
- +22
- bogimp
Комментарии (8)
Crush the castle 2 — хорош… поднял планку очень высоко…
но Мастер Осади 2 ето другое чем краш, я ж продолжаю тему первой части,
если помните у меня игра-пазл, и разние с-стеми запуска,
есть много нових вещей, которие я думаю окончательно покажут что игри разние а не рипоф.
но вот проблема в том что релиз я отложку с виходом краша (не учел что армори тоже делают)
и много щас народу отдихают так что отдача будет не очень хорошая.
Игра выше всяких похвал, новая графика, прорисовка объектов, фона… звуки, музыка, игра для меня стала эталоном качества.