Итак, у меня есть игра в флеш-платформе. В этой игре вам нужно перепрыгнуть через шипы. Поэтому я создаю шип и преобразую его в символ, клип. Когда он регистрируется как видеоклип, это не треугольник (например, шипы), а вместо этого прямоугольник. Это означает, что когда игрок идет, чтобы избежать всплесков и прыжков, если он слишком близко, он умирает, но он не попадает в шип, он попадает в невидимый прямоугольник вокруг шипа. Там все равно можно изменить форму клипа, чтобы он соответствовал шипу и шипу.Изменение размеров клипов AS3
ответ
вы можете использовать HitTest, вот пример использования
Из моего опыта по тому же типу вопроса, вы не можете использовать AS3 hitTestObject
(который я хотел бы представить вам» re, если у вас есть эта проблема) с определенной формой MC. Это всегда будет по умолчанию поле, которое занимает пространство самого мувиклипа.
Итак, чтобы ответить на ваш вопрос, нет, вы не можете изменить форму MC, чтобы сделать его всплеск, по умолчанию hitTestObject
использует ограничительную рамку вокруг MC.
Существует несколько способов обойти это (многие люди предлагали НЕ использовать hitTestOjbect
в целом, так как он не очень эффективен и вместо этого написал свой собственный тестовый код. Я бы предложил искать примеры этого онлайн, есть много их).
Ваш другой вариант, если вы не хотите иметь дело с этим, - это создать отдельную серию ячеек в форме прямоугольника, которые будут действовать как ваши ограничивающие прямоугольники и могут быть расположены в массивах, а затем просто запустите цикл, чтобы увидеть если ваш персонаж попадает в любой из них. Таким образом, вы можете отрегулировать размеры ограничительной коробки, как вы видите.
Но если вы хотите использовать hitTestObject
, к сожалению, вам нужно использовать весь ограничивающий объект объект. Поскольку я не совсем уверен в деталях того, как вы собираетесь это делать, моим лучшим предложением было бы просто выйти в интернет и ознакомиться с основами обнаружения попадания в AS3.
Ваша проблема связана с обнаружением попаданий, а не с видеоклипами.
Внутренний тест ударов между объектами проверяет ограничивающие рамки объектов, чтобы он не работал на вас.
Если вы можете как-то использовать плеер агент в качестве точки (самая низкая точка, как посреди его ноги или что-то в этом роде), вы можете использовать spike.hitTestPoint(globalFootX, globalFootY, true);
Если это не работает, вам либо придется вручную создать hittest-представление для предметов и ваша собственная логика hittest.
Другое решение состоит в том, чтобы нарисовать элементы в отдельный спрайт, а затем посмотреть, перекрываются ли пиксели. Я знаю, что сделал это в старом проекте AS2 с AI-роботами неправильной формы, перемещающимися в мире неправильной формы.
Я предоставил этот код для справки, он может быть трансформируемым в AS3 или, по крайней мере, вы можете использовать это как вдохновение для того, что для Google, чтобы найти это решение в AS3.
class messer_studios.utils.CollisionDetection {
static public function checkForCollision(p_clip1:MovieClip, p_clip2:MovieClip, p_alphaTolerance:Number):Rectangle {
// set up default params:
if (p_alphaTolerance == undefined) {
p_alphaTolerance = 255;
}
// get bounds:
var bounds1:Object = p_clip1.getBounds(_root);
var bounds2:Object = p_clip2.getBounds(_root);
// rule out anything that we know can't collide:
if (((bounds1.xMax < bounds2.xMin) || (bounds2.xMax < bounds1.xMin)) || ((bounds1.yMax < bounds2.yMin) || (bounds2.yMax < bounds1.yMin))) {
return null;
}
//Debug.log("might collide");
// determine test area boundaries:
var bounds:Object = {};
bounds.xMin = Math.max(bounds1.xMin, bounds2.xMin);
bounds.xMax = Math.min(bounds1.xMax, bounds2.xMax);
bounds.yMin = Math.max(bounds1.yMin, bounds2.yMin);
bounds.yMax = Math.min(bounds1.yMax, bounds2.yMax);
// set up the image to use:
var img:BitmapData = new BitmapData(bounds.xMax-bounds.xMin, bounds.yMax-bounds.yMin, false);
// draw in the first image:
var mat:Matrix = p_clip1.transform.concatenatedMatrix;
mat.tx -= bounds.xMin;
mat.ty -= bounds.yMin;
img.draw(p_clip1, mat, new ColorTransform(1, 1, 1, 1, 255, -255, -255, p_alphaTolerance));
// overlay the second image:
mat = p_clip2.transform.concatenatedMatrix;
mat.tx -= bounds.xMin;
mat.ty -= bounds.yMin;
img.draw(p_clip2, mat, new ColorTransform(1, 1, 1, 1, 255, 255, 255, p_alphaTolerance), "difference");
// find the intersection:
var intersection:Rectangle = img.getColorBoundsRect(0xFFFFFFFF, 0xFF00FFFF);
// if there is no intersection, return null:
if (intersection.width == 0) {
return null;
}
// adjust the intersection to account for the bounds:
intersection.x += bounds.xMin;
intersection.y += bounds.yMin;
return intersection;
};
public static function hitTestShape(mc1:MovieClip, mc2:MovieClip, alphaTolerence:Number):Boolean {
return checkForCollision(mc1, mc2, alphaTolerence) != null ? true : false;
}
}
Вы можете использовать BitmapData
вместе с hitTest
проверить столкновения на уровне пикселей, как это.
(Для проверки кода поместите два символа на этапе Flash, «rectClip» и «spike».Также проверяйте его сначала, удерживая их, а затем во второй раз держите их тронутыми и проверяйте.)
(В любом случае вы можете установить MouseMove
или startDrag()
и проверить его в прямом эфире.)
var rect:Rectangle = rectClip.getBounds(this);
var rectClipBmpData = new BitmapData(rect.width, rect.height, true, 0);
rectClipBmpData.draw(rectClip);
var spikeRect:Rectangle = spike.getBounds(this);
var spikeBmpData = new BitmapData(spikeRect.width, spikeRect.height, true, 0);
spikeBmpData.draw(spike);
if(rectClipBmpData.hitTest(new Point(rectClip.x, rectClip.y),
255,
spikeBmpData,
new Point(spike.x,spike.y),
255))
{
trace("hit");
}else
{
trace("No hit");
}
Успехов.
- 1. Создание векторного массива клипов AS3
- 2. AS3/Использование разных клипов в одном кадре
- 3. vba: изменение палитры клипов в формате США
- 4. Изменение размеров игры для разных размеров экрана
- 5. Автоматическое изменение размеров меток
- 6. setNavigationBarHidden - изменение размеров просмотров
- 7. изменение размеров многомерного вектора
- 8. C# изменение размеров вопрос
- 9. Изменение размеров окон Формы
- 10. Flexbox: изменение размеров элементов
- 11. iReport Изменение размеров массива
- 12. изменение размеров списка заказа
- 13. Изменение размеров аннотаций
- 14. Изменение размеров динамических изображений
- 15. Изменение размеров участков VBA
- 16. Изменение размеров растровых изображений
- 17. Изменение размеров значков ToolBar
- 18. Динамическое изменение размеров изображений
- 19. Изменение размеров специальных шрифтов
- 20. изменение размеров построенной диаграммы
- 21. GridBagLayout изменение размеров компонентов
- 22. Изменение размеров динамически osx
- 23. Изменение размеров виджета jQueryUI
- 24. Изменение размеров контейнеров FlexBox
- 25. Изменение размеров динамических массивов
- 26. Flash as3 как остановить воспроизведение детских клипов с помощью мыши?
- 27. испытание столкновение двух клипов в двух различных классах AS3
- 28. AS3: Изменение значений объекта
- 29. AS3 Изменение цвета
- 30. Изменение размеров страниц в pdf