![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Почему бы не обрисовать более мелкими фигурами (например квадратами) границу аквариума (вернее границу розовой части, что на верхнем рисунке)?
Пусть это и не самый точный способ, но он гибок и прост. Нарисованые квадраты потом добавить в массив (через тот же getChildAt()) и уже в нем проверять hitTest для каждого элемента, и если хоть один true, то рыбка пересекается с границей. Если ни с одним не пересеклась - значит плавает в "дырке". Последний раз редактировалось i.o.; 23.08.2010 в 17:42. |
|
|||||
|
а перед тем как пользоваться
нужно импортировать что-нибудь в класс?
Добавлено через 4 минуты package { import flash.display.Sprite; import flash.events.Event; public class Script extends Sprite { private var fish; private var aqurium; private var x1:Number; private var y1:Number; private var x2:Number; private var y2:Number; private var d:Number; public function Script():void { trace("Script loaded") x1 = 0; y1 = 0; fish = aqurium_mc.fish_mc; aqurium = aqurium_mc; fish.addEventListener(Event.ENTER_FRAME, moveFish); } private function moveFish(evt:Event) { x2 = fish.x; y2 = fish.y; d = Math.sqrt((x1-x2)^2+(y1-y2)^2); trace (d);// NaN } } } |
|
|||||
|
Lorem ipsum
|
Я вот все гадаю, чем не угодил ответ #8, который решает вопрос в полторы строки?
__________________
Поймай яблоко 2! |
|
|||||
|
На самом деле я просто не разобрался с ним. Не понял, как бы.
Последний раз редактировалось Dr_Bra; 23.08.2010 в 18:54. |
|
|||||
|
Lorem ipsum
|
Еще раз:
По картинке видно, что d не должно быть больше Raquarium - Rfish. Но так как вычислять d более затратно (надо от произведения Xfish*Xfish + Yfish*Yfish еще взять корень), то мы наоборот — оставляем квадрат d и сравниваем с квадратом же R (который в свою очередь равен нашему Raquarium - Rfish).
__________________
Поймай яблоко 2! |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 1,724
|
Цитата:
Цитата:
Последний раз редактировалось Zik.; 23.08.2010 в 20:38. |
|
|||||
|
Супер, спасибо всем за помощь, все получилось! Теперь буду знать как возводить в квадрат в нашем любимом as. А вот оператор ^ есть, он выполняет операцию побитового исключающего или, но мне до этого далеко еще.
Добавлено через 21 час 24 минуты Рано обрадовался, сделал простой пример, пытаюсь добиться положительного результата, но все кувырком, в прямом смысле слова. Добавлено через 21 час 24 минуты вот мой код package { import flash.display.Sprite; import flash.events.Event; public class RandomAnimat extends Sprite { private var obj; private var oval; private var speed:Number; private var clipRotation:Number; private var angle:Number; private var xMove:Number; private var yMove:Number; private var r:Number public function RandomAnimat():void { trace ("RandomAnimat loaded") oval = new Oval(); stage.addChild(oval); oval.x = stage.stageWidth/2; oval.y = stage.stageHeight/2; obj = new Obj1(); stage.addChild(obj); obj.x = stage.stageWidth/2; obj.y = stage.stageHeight/2; obj.addEventListener(Event.ENTER_FRAME, moveMyObj); randomValue(); } private function randomValue() { clipRotation = Math.random() * 360; angle = clipRotation * Math.PI / 180; speed = Math.random() * 5; xMove = speed * Math.cos(angle); yMove = speed * Math.sin(angle); obj.rotation = clipRotation; } private function moveMyObj(evt:Event):void { r = 200 - evt.target.width/2; trace (r) if(evt.target.x * evt.target.x + evt.target.y * evt.target.y > r * r)// что-то не то с этм условием, треугольник просто "колбасит" { randomValue(); //evt.target.x += xMove;//здесь рыба должна, по идее, отодвинуться от края аквариума на половину своей длинны //evt.target.y += yMove;//что бы не кружиться около бортика.. //evt.target.rotation = clipRotation; } evt.target.x += xMove; evt.target.y += yMove; } } } Если нужно, могу положить в айфолдр исходник, но там как бы все просто. В .fla файле, в библиотеке, треугольник – это наш obj и овыл – это наш oval, внутри которо происходит сэйшн. Добавлено через 38 часов 54 минуты вот здесь лежат файлы, посмотрите, пожалуйста Последний раз редактировалось Dr_Bra; 24.08.2010 в 18:06. |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:23. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| hittestobject , область , проверка |
|
|