Просмотр полной версии : hitTest к многим обьектам не прямоугольной формы
fromotherplanet
24.08.2006, 11:08
Такая проблема: обьекты неправильной формы (не прямоугольные) создаються duplicateMovieClip бесконечно, и другие обьекты, с которыми надо сравнивать те обьекты тоже неправильной вормы и тоже создаються duplicateMovieClip бесконечно. Т.Е. есть мувик а, который постоянно дублируется, и мувик б, который так же всё време дублируеться, и а, и б - не правильной формы. Как проверить копии мувика а ,на чтото типа hitTest к копиям б?
Snakesdesign
24.08.2006, 11:30
сделай 2 контейнера. В одном - все а, в другом все б. хиттесть эти 2 контейнера, как тока пересеклись, перебором узнавай какие именно. тока если очень много объектов, тормозить станет.... Хотя... Ищи в поиске по слову "коллизии" кажется, там был пример точно то что нужно.
fromotherplanet
24.08.2006, 11:44
обьединять не хочется, да не получится все обьекты не зависят друг от друга(и конейнеры тоже проверяться будут по прямоугольникам), а перебором уж точно не получится их имена от например 1 до бесконечности, етож dplicatemovieclip, конечно клипы удаляются при определенных условиях (если покидают экран), но некоторые до этих условий "не доходят".
Snakesdesign
24.08.2006, 11:46
до бесконечности вряд ли.. тормозы бы были:) почему некоторые "не доходят"?
fromotherplanet
24.08.2006, 11:50
они могут при движении "отражаться" от некоторых обьектов и не выходить из "рабочий области."
fromotherplanet
24.08.2006, 12:04
я скорее всего буду вписывать в клип б(с которым всё намного сложнее чем с а), чтоб у всех обьектов б, был hittest на обьекты а, но как все обьекты а назвать одним "обращением"?
может можно обращаться ко всем клипам с одинаковой частью имяни одной командой? и ещё эта проблема с неправильной формой не понимаю как решается. нашёл флешку в которой это решино, но декомпелировать, и посмотреть как, не удалось.
У BitmapData более продвинутый hitTest в плане объектов с неправильной формой (и даже с альфой). Но это работает только начиная с 8-ки.
fromotherplanet
24.08.2006, 12:21
Жалко, у меня 7, а не можешь по подробнее описать? может куплю 8. А с исходником от 7 он будет нормально работать? Все команды от 7 работают?
fromotherplanet
24.08.2006, 13:41
Ну так может кто-нибудь знает как обратится к мувикам с одинаковой частью имени? И как сделать hittest, как в test.swf(который в test.zip, н а 2 поста выше...)?
http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001958.html
fromotherplanet
24.08.2006, 14:23
это про BitmapData? Спасибо, почитаю.
Kyber Anton
24.08.2006, 14:54
..."как обращаться к клипам с одинаковой частью имени"...
допустим, клипы зовут _root.b1 , _root.b2 , ... e.t.c
namefirst = "b"
for(var i=1;i<=maxclip;++i){
nameofclip = namefirst+i;
_root[nameofclip] //вот это обращение к мувику.
}
fromotherplanet
24.08.2006, 15:00
Спасибо попробую, а не будет тормозить с большим количеством мувиков?
fromotherplanet
24.08.2006, 15:40
нет, это не получается. скорее всего, дело в том, что сначала не одного мувика с таким именем нет.
вот, как я писал: может не правильно? В мувик onClipEvent (enterFrame) {
namefirst = "luch"
for(var i=1;i<=maxclip;i++){
nameofclip = namefirst+i;
_root.test=this.hitTest(_root[nameofclip])
}}
fromotherplanet
24.08.2006, 16:00
Нельзя ли как нибудь сделать так, чтабы мувики при создании , добавляли свои имена, куда-нибудь, а потом драгие мувики делали на эти имена hittest? если можно, то как?
CCCPirate
24.08.2006, 16:49
Нельзя ли как нибудь сделать так, чтабы мувики при создании , добавляли свои имена, куда-нибудь, а потом драгие мувики делали на эти имена hittest? если можно, то как?
for (var mov in клип_в_котором_мувики) {
if (this.hitTest(mov)) {
trace('пересечение'+this._name+' и '+mov._name);
}
}
вставь такой код в прототип твоих мувиков и усе
кстати если мувики неправильной формы хиттест апроксимирует их квадратом, т е если нужно реалное столкновение надо на мувик ставить точки- детекторы
fromotherplanet
24.08.2006, 17:18
не немного не то, все мувики в руте, мувики дулированные с мувика а, при создании записывают куда-то в список свои имена, мувики дублированные с мувика б вибят эти имена и делают на него hitTest,получается что-то типа : if(this.hitTest("1 имя в списке") or this.hitTest("2 имя в списке")...this.hitTest("последнее имя в списке")){a=1}
, а при удалении(при вылете за пределы экрана) удаляют своё имя из этого списка. вот как мне надо.
Такое возможно?Как?
fromotherplanet
24.08.2006, 17:49
нашёл похожую проблему, поиск юзал не в ту сторону: юзал на hittest, а там русскими буквами, попросил там помоч. Чувствую, я эту флэшку не доделую, слишком много "запорок"...но кто поможет, с хиттестом буду очень благодарен...
CCCPirate
24.08.2006, 18:05
Ну так и сделай for (var имя in _root) и он автоматом переберет все объекты в руте.
Зачем для них массив имен создавать?
fromotherplanet
24.08.2006, 18:10
я пробовал, во первых- тормозит, во вторых- перебирает, даже те, что не надо...:(
CCCPirate
24.08.2006, 18:22
значит для тех что надо создай отдельный клип и перебирай объекты только в нем. зачем держать все мувики в руте?
fromotherplanet
24.08.2006, 18:31
а будет перебирать все обьекты,которые существуют с данный момент, в этом мувике?
CCCPirate
24.08.2006, 18:37
а ка ты думал?
будет перебирать
короче : делай класс клипов которые будешь аттачить в определенный клип и делай им функцию на проверку столкновений между объектами в том же клипе - запускай проверку на он ентер фрем или на сет интервал как хош
fromotherplanet
24.08.2006, 18:56
Спасибо попробую, просто щас исходник не со мной...
ещё одна проблема, может знаешь, можно ли хиттестить к одной линии, и если она под наклоном, не к прямоугольнику, а только к линии, и если, труе центр обьекта встаёт в ближайшую точу этой линии и движется к концу этой линии... И чтоб у этой линии если менялся угол, всё равно движется? примерно так. если точнее, мне надо сделать управляемый "похищающий" луч для НЛО =) , которым можно притягивать обьекты, и человечков...На самом деле луч- вытянутый треугольник, а та линия-идёт по центру этого луча..Не знаешь какого-нибудь решения?
fromotherplanet
24.08.2006, 19:04
предидущие вопросы тоже про эту же игрушку. если всё получится, то игруха весёлой будет...
CCCPirate
24.08.2006, 19:06
наклонная линия - будет апроксимироваться прямоугольником
что бы был хит тест рельно на линию - надо вдоль ее длинны расположить клипы-точки и проверять хит тест к ним и в центре объекта тож надо сделать клип-точкуБ вообщем все объекты не апроксимируемые квадратом надо разделять на отдельные более мелкие квадраты - это самый верный метод для работы с хит тестомб причем хит к ним проверять только после хита на их парент...
fromotherplanet
25.08.2006, 10:19
А в 8 флэше можно сделать без этих точек?
Вот пример на 8-ке, с упоминаемой мною выше возможностью хиттеста с альфа каналом.
fromotherplanet
25.08.2006, 11:37
Обязательно посмотрю, когда восьмой флэш куплю...
fromotherplanet
25.08.2006, 12:14
С похищающим лучём ничего и никак не получается:( , создал новую тем, о нем..
fromotherplanet
25.08.2006, 12:36
Как сделать так, чтоб мувики(которые дублируются с клипа в руте) дублировались в какой-нибудь другой мувик?
Так можно сделать только в AS3. Поэтому надо использовать attachMovie
fromotherplanet
25.08.2006, 13:53
:(... Если всё будет ОК завтра, иду за восьмым флэшем...:)
fromotherplanet
25.08.2006, 16:57
а чем различаются attachMovie и duplicateMovieClip?
fromotherplanet, первый достаёт мувик из либы, второй дублирует существующий.
fromotherplanet
25.08.2006, 18:29
а как тогда можно использовать attachMovie вместо duplicateMovieClip
Точно так же, только доставать мувик из либы, а не копировать существующий.
fromotherplanet
25.08.2006, 18:42
А имена им даются так-же, как и при duplicateMovieClip?
http://livedocs.macromedia.com/flash/8/main/00001724.html
http://livedocs.macromedia.com/flash/8/main/00002440.html
fromotherplanet
25.08.2006, 18:52
Спасибо!
CCCPirate
25.08.2006, 19:29
У BitmapData более продвинутый hitTest в плане объектов с неправильной формой (и даже с альфой). Но это работает только начиная с 8-ки.
КАРАМБА!
Что же за несправедливость такая?
Почему я это узнаю только сейас, когда большая часть проекта уже сделаны и все на хиттестах к мувикам?:yahoo:
Знал бы раньше, что есть такая фича не корячился бы.
КАРАМБА!
Что же за несправедливость такая?
Почему я это узнаю только сейас, когда большая часть проекта уже сделаны и все на хиттестах к мувикам?:yahoo:
Знал бы раньше, что есть такая фича не корячился бы.
Хелп надо чаще читать.
CCCPirate
25.08.2006, 20:25
если делать hitTest->View Help то он идет на метод мувиклипа а про другие классы он и не упоминает - отвратительная недоработка хелперов по одноименным методам разных классов!!!
Кстати вы не в курсе он случайно не медленнее чем метод мувиклипов?
(всмысле не ест ли он больше памяти)
если делать hitTest->View Help то он идет на метод мувиклипа а про другие классы он и не упоминает - отвратительная недоработка хелперов по одноименным методам разных классов!!!
Если набрать "hitTest" в F1, найдётся всё по теме.
CCCPirate
25.08.2006, 20:36
Товарищи!
подскажите все-таки стоит ли мне переводить все на битмапный хиттест?
или это может обернуться большими тормозами?
Зависит от размеров битмапов
fromotherplanet
28.08.2006, 10:24
Купил восьмой флеш.
посмотрел пример hitTest с альфа каналом - Супер...!
Попробую его использовать.
fromotherplanet
28.08.2006, 11:20
А нельзя как-нибудь попроще написать такой хитТест, чтоб работал уже с вытащенными в ролик обьектами...И вообще, слижком там всё сложно,:wacko: не могу разобраться что и как получается. Я вообще раньше всё по другому писал(по ламеровски немножко::confused: использовал onClipEvent...:rolleyes: ). Или помогите пожалуйста разобраться в таком написании...
ты либо доплачивай людям за то что они будут мысли читать, либо покажи "такое написание".
fromotherplanet
28.08.2006, 12:29
Я же говорю про исходник, который iNils выложил. С хитТестом
fromotherplanet
28.08.2006, 13:59
Вообще вот
import flash.display.BitmapData;
import flash.geom.Point;
//////
var mc_1:MovieClip = this.createEmptyMovieClip ("mc", this.getNextHighestDepth ());
var myBitmapData:BitmapData = new BitmapData (800, 600, true, 0x00000000);
mc_1.attachBitmap (myBitmapData, this.getNextHighestDepth ());
myBitmapData.draw (mcs);
//////
var mc_2:MovieClip = this.createEmptyMovieClip ("mc2", this.getNextHighestDepth ());
myBitmapData2 = new BitmapData (200, 200, true, 0x00000000);
mc_2.attachBitmap (myBitmapData2, this.getNextHighestDepth ());
myBitmapData2.draw (mcf);
mc_2.startDrag (true);
Mouse.hide ();
/////
var destPoint:Point = new Point (mc_1._x, mc_1._y);
var currPoint:Point = new Point (mc_2._x, mc_2._y);
mc_1.onEnterFrame = function () {
//currPoint.x = mc_2._x;
// currPoint.y = mc_2._y;
myBitmapData2 = new BitmapData (200, 200, true, 0x00000000);
mc_2.attachBitmap (myBitmapData2, this.getNextHighestDepth ());
myBitmapData2.draw (mcf);
if (myBitmapData.hitTest (new Point (this._x, this._y), 100, myBitmapData2, new Point (mc_2._x, mc_2._y))) {
this._alpha = 50;
} else {
this._alpha = 100;
}
};
Очень Очень большая просьба дать простой исходник с 2 обьектами и хиттестом с битмапдата...
Кажись ссылка на hitTest2.zip побилась...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.