![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2014
Сообщений: 192
|
Подскажите самый простой способ определения пересечения объектов (Sprite). Дело в том, что на сайте
http://codeforgames.ru автор рассматривает большое количество способов пересечения (точка-окружность, окружность-окружность .....). Есть довольно громоздкие коды для определения точного времени пересечения окружностей. Может есть более простой способ определения пересечения Sprite? |
|
|||||
|
Какого Sprite? Вы же понимаете, что код пересечения бутылки и парелепипеда будет отличаться от кода пересечения пачки хлопьев и сердечек, похожих на губы?
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Jan 2013
Сообщений: 322
|
Dmitriy154, http://help.adobe.com/ru_RU/FlashPla...html#hitTest()
Добавлено через 3 часа 6 минут > http://codeforgames.ru/kosynka-action-script/ Цитата:
Цитата:
|
|
|||||
|
Регистрация: Feb 2014
Сообщений: 192
|
Цитата:
|
|
|||||
var koloda:Array = []; var koloda0:Array = []; var koloda1:Array = []; var kolodaA1:Array = []; var kolodaA2:Array = []; var kolodaA3:Array = []; var kolodaA4:Array = []; var kolodaK1:Array = []; var kolodaK2:Array = []; var kolodaK3:Array = []; var kolodaK4:Array = []; var kolodaK5:Array = []; var kolodaK6:Array = []; var kolodaK7:Array = []; //добавление бубновых карт for (var b:uint=1; b<=13; b++) { karta1 = "b"+b; game[karta1] = new b_mc; pole.addChild(game[karta1]); game[karta1].gotoAndStop(b); game[karta1].x = b*50; game[karta1].y = 72; game[karta1].active = false; game[karta1].koloda = "koloda0"; game[karta1].cifra = b; game[karta1].name = b; game[karta1].mast = "b"; game[karta1].color = "red"; game[karta1].width = 70; game[karta1].height = 96; game[karta1].addEventListener(MouseEvent.MOUSE_DOWN, md); game[karta1].addEventListener(MouseEvent.MOUSE_UP, mu); game[karta1].addEventListener(MouseEvent.MOUSE_OVER, m_over); game[karta1].addEventListener(MouseEvent.MOUSE_OUT, m_out); } //добавление червовых карт for (var c:uint=1; c<=13; c++) { karta1 = "c"+c; game[karta1] = new c_mc; pole.addChild(game[karta1]); game[karta1].gotoAndStop(c); game[karta1].x = c*50; game[karta1].y = 172; game[karta1].active = false; game[karta1].koloda = "koloda0"; game[karta1].cifra = c; game[karta1].name = c + 13; game[karta1].mast = "c"; game[karta1].color = "red"; game[karta1].width = 70; game[karta1].height = 96; game[karta1].addEventListener(MouseEvent.MOUSE_DOWN, md); game[karta1].addEventListener(MouseEvent.MOUSE_UP, mu); game[karta1].addEventListener(MouseEvent.MOUSE_OVER, m_over); game[karta1].addEventListener(MouseEvent.MOUSE_OUT, m_out); } //добавление крестовых карт for (var k:uint=1; k<=13; k++) { karta1 = "k"+k; game[karta1] = new k_mc; pole.addChild(game[karta1]); game[karta1].gotoAndStop(k); game[karta1].x = k*50; game[karta1].y = 272; game[karta1].active = false; game[karta1].koloda = "koloda0"; game[karta1].cifra = k; game[karta1].name = k + 26; game[karta1].mast = "k"; game[karta1].color = "black"; game[karta1].width = 70; game[karta1].height = 96; game[karta1].addEventListener(MouseEvent.MOUSE_DOWN, md); game[karta1].addEventListener(MouseEvent.MOUSE_UP, mu); game[karta1].addEventListener(MouseEvent.MOUSE_OVER, m_over); game[karta1].addEventListener(MouseEvent.MOUSE_OUT, m_out); } //добавление пиковых карт for (var p:uint=1; p<=13; p++) { karta1 = "p"+p; game[karta1] = new p_mc; pole.addChild(game[karta1]); game[karta1].gotoAndStop(p); game[karta1].x = p*50; game[karta1].y = 372; game[karta1].active = false; game[karta1].koloda = "koloda0"; game[karta1].cifra = p; game[karta1].name = p + 39; game[karta1].mast = "p"; game[karta1].color = "black"; game[karta1].width = 70; game[karta1].height = 96; game[karta1].addEventListener(MouseEvent.MOUSE_DOWN, md); game[karta1].addEventListener(MouseEvent.MOUSE_UP, mu); game[karta1].addEventListener(MouseEvent.MOUSE_OVER, m_over); game[karta1].addEventListener(MouseEvent.MOUSE_OUT, m_out); }
__________________
тут я |
|
|||||
|
Но в итоге у него что-то даже симпатичное получилось.
Наверное, недавно переквалифицировавшийся дизайнер или аниматор. Или давно привык делать простенькие игры.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
|
Регистрация: Jan 2013
Сообщений: 322
|
caseyryan,
Цитата:
ТСу понравилось BitmapData.hitTest КорДум, глянь на 312 строку, там функция в 600 строк |
|
|||||
|
Регистрация: Feb 2014
Сообщений: 192
|
так точно, мне понравилось BitmapData.hitTest. НО еще не разобрался, но истина где-то там
|
|
|||||
|
Регистрация: Jan 2013
Сообщений: 322
|
Dmitriy154,
import flash.display.Sprite; import flash.geom.Rectangle; import flash.display.BitmapData; import flash.geom.Point; import flash.geom.Matrix; import flash.display.Bitmap; import flash.geom.ColorTransform; import flash.display.IBitmapDrawable; import flash.display.DisplayObjectContainer; var s1:Sprite = new Sprite(); var s2:Sprite = new Sprite(); this.addChild(s1); this.addChild(s2); s1.graphics.beginFill(0xFF0000); s1.graphics.drawRect(0, 0, 100, 200); s1.rotation = 60; s1.transform.concatenatedMatrix s2.graphics.beginFill(0xFF0000); s2.graphics.drawCircle(50, 50, 50); s2.scaleX = .5; s2.x = 150; s2.y = 150; s1.startDrag(true); this.addEventListener(Event.ENTER_FRAME, onEnterFrame); function onEnterFrame(event:Event):void{ s1.transform.colorTransform = new ColorTransform(); if(test(s1, s2)){ s1.transform.colorTransform = new ColorTransform( 1, 1, 0, 1, 0xFF, 0, 0xFF ); } } function test(s1:DisplayObject, s2:DisplayObject):Boolean{ if(!(s1.transform.matrix && s2.transform.matrix && s1.parent === s2.parent)){ return false; } var rect1:Rectangle = s1.getBounds(this); var rect2:Rectangle = s2.getBounds(this); if(rect1.intersects(rect2)){ var bm1:BitmapData = new BitmapData( rect1.width, rect1.height, true, 0x00000000 ); var bm2:BitmapData = new BitmapData( rect2.width, rect2.height, true, 0x00000000 ); var m:Matrix = null; m = s1.transform.matrix.clone(); m.translate(-rect1.x, -rect1.y); bm1.draw(s1, m); m = s2.transform.matrix.clone(); m.translate(-rect2.x, -rect2.y); bm2.draw(s2, m); var maxAlpha:uint = 0x01; // чувствительность к прозрачности return bm1.hitTest( rect1.topLeft, maxAlpha, bm2, rect2.topLeft, maxAlpha ); } return false; } |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:41. |
|
|
« Предыдущая тема | Следующая тема » |
|
|