![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2007
Адрес: Киев
Сообщений: 96
|
Подскажите пожалуйста как определить пересечение объектов произвольной формы например таких как здесь http://my-rezerv.jino-net.ru/cross.swf
Если кто-то сможет, покажите на примере. http://my-rezerv.jino-net.ru/Cross.rar |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
У класса BitmapData, тоже есть метод hitTest, но работает он на пиксельном уровне, что дает возможность определять соприкосновения фигур с произвольной формой.
Последний раз редактировалось iNils; 26.11.2007 в 02:03. |
|
|||||
|
Регистрация: Mar 2007
Адрес: Киев
Сообщений: 96
|
Спасибо iNils за совет, и отдельное спасибо за перевод.
С BitmapData почти получилось, но есть одно но. В приведённом в хелпе примере import flash.display.BitmapData;
import flash.geom.Point;
var myBitmapData:BitmapData = new BitmapData(100, 80, false, 0x00CCCCCC);
var mc_1:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mc_1.attachBitmap(myBitmapData, this.getNextHighestDepth());
var mc_2:MovieClip = createRectangle(20, 20, 0xFF0000);
var destPoint:Point = new Point(myBitmapData.rectangle.x, myBitmapData.rectangle.y);
var currPoint:Point = new Point();
mc_1.onEnterFrame = function() {
currPoint.x = mc_2._x;
currPoint.y = mc_2._y;
if(myBitmapData.hitTest(destPoint, 255, currPoint)) {
trace(">> Collision at x:" + currPoint.x + " and y:" + currPoint.y);
}
}
mc_2.startDrag(true);
function createRectangle(width:Number, height:Number, color:Number):MovieClip {
var depth:Number = this.getNextHighestDepth();
var mc:MovieClip = this.createEmptyMovieClip("mc_" + depth, depth);
mc.beginFill(color);
mc.lineTo(0, height);
mc.lineTo(width, height);
mc.lineTo(width, 0);
mc.lineTo(0, 0);
return mc;
}
то почему-то происходит hitTest области до поворота. Что и как необходимо делать, что-бы после поворота mc_1 хиттестилась уже повёрнутая область? |
|
|||||
|
Регистрация: Mar 2007
Адрес: Киев
Сообщений: 96
|
Поворачиваю Matrix,
но все равно почему-то происходит hitTest области до поворота. import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Matrix;
import flash.geom.Transform;
//--------------------------------------------------------------
var myBitmapData1:BitmapData = new BitmapData(100, 80, false, 0x00CCCCCC);
var mc_1:MovieClip = this.createEmptyMovieClip("mc1", this.getNextHighestDepth());
mc_1.attachBitmap(myBitmapData1,this.getNextHighestDepth());
//--------------------------------------------------------------
var myBitmapData2:BitmapData = new BitmapData(20, 20, false, 0x0055111);
var mc_2:MovieClip = this.createEmptyMovieClip("mc2", this.getNextHighestDepth());
var mc_in2:MovieClip = mc_2.createEmptyMovieClip("mcin2", this.getNextHighestDepth());
mc_in2.attachBitmap(myBitmapData2,this.getNextHighestDepth());
//--------------------------------------------------------------
mc_y = 50;
mc_x = 50;
mc_rotation = Math.floor(Math.random() * 360) * 0.0174;
var myMatrix:Matrix = new Matrix();
myMatrix.rotate(mc_rotation);
var translateMatrix:Matrix = new Matrix();
translateMatrix.translate(mc_y,mc_x);
myMatrix.concat(translateMatrix);
var rectangleTrans:Transform = new Transform(mc_1);
rectangleTrans.matrix = myMatrix;
//--------------------------------------------------------------
var destPoint:Point = new Point(myBitmapData1.rectangle.x, myBitmapData1.rectangle.y);
var currPoint:Point = new Point();
onEnterFrame = function () {
currPoint.x = mc_2._x;
currPoint.y = mc_2._y;
if (myBitmapData1.hitTest(destPoint, 250, myBitmapData2, currPoint)) {
trace("// Collision at x:" + currPoint.x + " and y:" + currPoint.y);
}
};
mc_2.startDrag(true);
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
mc_rotation
Тут ошибка видимо, либо mc_1._rotation, либо mc_2._rotation (и двумя строчками выше тоже). Но в любом случаи, никакх поворотов мувиклипов не должно быть, только поворот BitmapData. |
|
|||||
|
Регистрация: Mar 2007
Адрес: Киев
Сообщений: 96
|
поворот BitmapData возможен только через BitmapData.draw ?
|
|
|||||
|
Регистрация: Mar 2007
Адрес: Киев
Сообщений: 96
|
Получилось, но...
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Matrix;
import flash.geom.Transform;
//--------------------------------------------------------------
var myBitmapData0:BitmapData = new BitmapData(120, 80, false, 0x00CCCCCC);
var myBitmapData1:BitmapData = new BitmapData(550, 400, true, 0x00CCCCCC);
var mc_1:MovieClip = this.createEmptyMovieClip("mc1", this.getNextHighestDepth());
mc_1.attachBitmap(myBitmapData1,this.getNextHighestDepth());
//--------------------------------------------------------------
var myBitmapData2:BitmapData = new BitmapData(20, 20, false, 0x0055111);
var mc_2:MovieClip = this.createEmptyMovieClip("mc2", this.getNextHighestDepth());
mc_2.attachBitmap(myBitmapData2,this.getNextHighestDepth());
//--------------------------------------------------------------
mc_y = 250;
mc_x = 150;
mc_rotation = Math.floor(Math.random() * 360) * 0.0174;
var myMatrix:Matrix = new Matrix();
myMatrix.rotate(mc_rotation);
var translateMatrix:Matrix = new Matrix();
translateMatrix.translate(mc_y,mc_x);
myMatrix.concat(translateMatrix);
myBitmapData1.draw(myBitmapData0,myMatrix);
//--------------------------------------------------------------
var destPoint:Point = new Point(myBitmapData1.rectangle.x, myBitmapData1.rectangle.y);
var currPoint:Point = new Point();
onEnterFrame = function () {
currPoint.x = mc_2._x;
currPoint.y = mc_2._y;
if (myBitmapData1.hitTest(destPoint, 250, myBitmapData2, currPoint)) {
trace("// Collision at x:" + currPoint.x + " and y:" + currPoint.y);
}
};
mc_2.startDrag(true);
|
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
тут на форуме вроде были примеры как это реализовать без битмапдата...однако ресурсов такая попиксельная проверка хавает немерянно
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|