Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Замена HitTestPoint (http://www.flasher.ru/forum/showthread.php?t=210492)

ZackMercury 22.03.2015 15:45

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

И только после этого начинать игру и проверять столкновения когда надо.

Добавлено через 14 минут
Цитата:

Плюс если я собираюсь использовать BlendMode, мне надо что-то в соответствующий параметр писать? (вопрос не по теме, это уже касательно флешек а-ля worms)
Цитата:

draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:flash.geom:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void
Draws the source display object onto the bitmap image, using the Flash runtime vector renderer.
Используйте этот параметр.

Цитата:

blendMode:String (default = null) — A string value, from the flash.display.BlendMode class, specifying the blend mode to be applied to the resulting bitmap.

Wormhole 22.03.2015 18:24

Цитата:

Сообщение от ZackMercury (Сообщение 1180383)
Используйте этот параметр.[/url]

Я так и подумал, спасибо. Посмотрю насчет вопросов, может, возникнут

Добавлено через 12 минут
Цитата:

Сообщение от ZackMercury (Сообщение 1180383)
Так вот, суть в том, чтобы сгруппировать ваши платформы в один единый контейнер, нарисовать их в битмапдату с размерами этого контейнера(а лучше нарисовать сам контейнер, тогда и матрица не нужна), создать экземпляр битмапа, скормить ему битмапдату с платформами и далее удалить контейнер с векторными формами с экрана(removeChild), а по сути можно вообще не добавлять.

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

Добавлено через 16 минут
Цитата:

Сообщение от ZackMercury (Сообщение 1180383)
Так вот, суть в том, чтобы сгруппировать ваши платформы в один единый контейнер <...> а лучше нарисовать сам контейнер

Вы имеете ввиду сгруппировать их и записать как объект класса MovieClip? А нарисовать контейнер - как? Что он должен из себя представлять? Я всегда думал, что контейнер - это абстрактный объект...

Добавлено через 17 минут
Цитата:

Сообщение от ZackMercury (Сообщение 1180383)
нарисовать их в битмапдату

Командой draw()?

Добавлено через 18 минут
Цитата:

Сообщение от ZackMercury (Сообщение 1180383)
скормить ему битмапдату

Что имеется в виду под "скормить"?


Я надеюсь, вы ответите на все мои вопросы. Заранее спасибо

ZackMercury 22.03.2015 19:16

Цитата:

Можете пояснить это предложение насчет контейнера?
Если собираете уровень в Flash IDE, то выделите все платформы и нажмите F8, затем окей и дайте инстанс нейм container.

Код AS3:

var bmpDt:BitmapData = new BitmapData(container.width, container.height, true, 0x00000000);
bmpDt.draw(container);
removeChild(container);

Затем вот так:
Код AS3:

var bmp:Bitmap = new Bitmap(bmpDt);
bmp.x = container.x;
bmp.y = container.y;
addChild(bmp);

И теперь мы можем делать с растровой копией контейнера с платформами буквально всё, что захотим.
Код AS3:

if(bmpDt.getPixel32(positionOnBitmap.x, positionOnBitmap.y) >> 24 > 0) trace("Point hits a visible pixel");

Правда для проверки столкновения с точкой в целом, а не конкретно на битмапдате, нужно от positionOnBitmap.x отнимать bmp.x, а от positionOnBitmap.y соответственно bmp.y.

Добавлено через 5 минут
Сейчас попробую быстро набыдлокодить накатать пример...

Wormhole 22.03.2015 19:59

Цитата:

Сообщение от ZackMercury (Сообщение 1180395)
Если собираете уровень в Flash IDE, то выделите все платформы и нажмите F8, затем окей и дайте инстанс нейм container.

Код AS3:

var bmpDt:BitmapData = new BitmapData(container.width, container.height, true, 0x00000000);
bmpDt.draw(container);
removeChild(container);

Затем вот так:
Код AS3:

var bmp:Bitmap = new Bitmap(bmpDt);
bmp.x = container.x;
bmp.y = container.y;
addChild(bmp);

И теперь мы можем делать с растровой копией контейнера с платформами буквально всё, что захотим.
Код AS3:

if(bmpDt.getPixel32(positionOnBitmap.x, positionOnBitmap.y) >> 24 > 0) trace("Point hits a visible pixel");

Правда для проверки столкновения с точкой в целом, а не конкретно на битмапдате, нужно от positionOnBitmap.x отнимать bmp.x, а от positionOnBitmap.y соответственно bmp.y.

Добавлено через 5 минут
Сейчас попробую быстро набыдлокодить накатать пример...

Ха! А я уж боялся просить код. Теперь все понятно. Действительно просто. Спасибо!!!

ZackMercury 22.03.2015 20:32

Верней там должно быть так:

Код AS3:

if(bmpDt.getPixel32(positionOnBitmap.x, positionOnBitmap.y) >> 24 & 0xFF > 0) trace("Point hits a visible pixel");

Сча, я почти закончил с демкой :D

Wormhole 22.03.2015 20:55

Цитата:

Сообщение от ZackMercury (Сообщение 1180398)
Верней там должно быть так:

Код AS3:

if(bmpDt.getPixel32(positionOnBitmap.x, positionOnBitmap.y) >> 24 & 0xFF > 0) trace("Point hits a visible pixel");

Сча, я почти закончил с демкой :D

Будет полезно посмотреть)

ZackMercury 22.03.2015 21:05

Вложений: 2
main.swf   (27.2 Кб)


Быстро мышкой набросал графику х)

Кликнуть в области флешки и управлять пробел-влево-вправо.

Wormhole 22.03.2015 23:19

Это лицо будет сниться мне в кошмарах. http://upfile.at.ua/2015-03-22_22-14...ot_ehkrana.png

Спасибо за пример!

ZackMercury 23.03.2015 00:47

Пародия на Cтива(в стиле ака ваша ава) из кубомира, старался :D

Wormhole 05.04.2015 22:18

Цитата:

Сообщение от ZackMercury (Сообщение 1180409)
Пародия на Cтива(в стиле ака ваша ава) из кубомира, старался :D

Это ж спуди мин. Ну ок


Часовой пояс GMT +4, время: 23:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.