Форум программистов, компьютерный форум, киберфорум
Наши страницы
ActionScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Wells77
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
1

Ограничение передвижения и столкновение

16.10.2013, 12:37. Просмотров 781. Ответов 6
Метки нет (Все метки)

Добрый день. Столкнулся с задачей - ограничение передвижения мувика в области с произвольными границами. Вобщем как правильно организовать следующую задачу: Вид сверху. Есть озеро определенной формы с выступами неровных берегов (припустим область нарисована флешем и сохранена в мувик lake). Есть лодка (прямоугольник мувик мс). Как правильно сделать, чтоб лодка плавала в пределах только этого озера произвольной формы?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2013, 12:37
Ответы с готовыми решениями:

Текст, меняющийся в зависимости от передвижения объекта
Здравствуйте, я начала изучать Action Script совсем недавно. Никак не могу...

Столкновение объектов
Ребят выручайте :) Есть класс Bot и есть класс Bullet. В каждом классе...

Проверка на столкновение
Есть массив со списком объектов на сцене. При нажатии стрелок, эти объекты...

Реакция на столкновение
Здравствуйте уважаемые гуру!! Задумал я написать реакцию на столкновение, но...

Столкновение объектов
Здравствуйте. Я раньше немного программировала на as2, и сейчас решила освоить...

6
TanaTiX
Модератор
2798 / 1652 / 168
Регистрация: 19.02.2011
Сообщений: 6,011
Завершенные тесты: 2
16.10.2013, 12:48 2
Посмотри тут
1
Wells77
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
16.10.2013, 13:04  [ТС] 3
Спс, уже вижу что очень хороший материал, правда как я понимаю на ас 2 написан? Буду пробовать, спасибо за оперативность.
0
TanaTiX
Модератор
2798 / 1652 / 168
Регистрация: 19.02.2011
Сообщений: 6,011
Завершенные тесты: 2
16.10.2013, 13:13 4
Цитата Сообщение от Wells77 Посмотреть сообщение
правда как я понимаю на ас 2 написан?
Да, но тут дело не в версии языка, а в подходах.
0
Wells77
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
16.10.2013, 16:38  [ТС] 5
Начал разбирать код и переписал на ас3. Но столкнулся с ошибкой при компиляции. Объясните пжста в чем проблема а собственно в местах кода где обращение к методу hitTest. Вот оригинал кода на ас2:

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//Шаг за 1 кадр 
step = 2;   
onEnterFrame = function(){ 
var dx = _root._xmouse - man._x; 
var dy = _root._ymouse - man._y; 
if (Math.abs(dx) > step) { 
var tgtX = man._x + ((dx > 0)? step : -step); 
} 
if (Math.abs(dy) > step) { 
var tgtY = man._y + ((dy > 0)? step : -step); 
}   
//Запоминаем положение 
oldX = man._x; 
oldY = man._y;   
//Смещаемся если новые координаты попадают в зону 
if (path.hitTest(man._x, tgtY, true)) { 
man._y = tgtY; 
} 
if(path.hitTest(tgtX, man._y, true)) { 
man._x = tgtX; 
}  
timeDx = man._x - oldX; 
timeDy = man._y - oldY; 
if(timeDx==0 && timeDy==0) { 
//Если не было смещения - в кадр где стоим 
man.gotoAndStop(5); 
}
else { 
man.play(); 
//Поворачиваемся по ходу движения 
rot = Math.atan2(timeDy, timeDx)*180/Math.PI; man._rotation = rot; 
}   
}
А вот мой переписанный на ас3:

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import flash.display.BitmapData;
 
//Шаг за 1 кадр 
var step:Number = 2;
var oldX:Number; 
var oldY:Number; 
var timeDx:Number; 
var timeDy:Number;
var rot:Number;
var dx:Number;
var dy:Number;
var tgtX:Number;
var tgtY:Number;
 
//слушетель событий смены кадров
addEventListener(Event.ENTER_FRAME,moveCar);
 
//---------событие на смену кадра-------------
function moveCar(e:Event):void {
 
dx = mouseX - man.x; 
dy = mouseY - man.y; 
if (Math.abs(dx) > step) { 
tgtX = man.x + ((dx > 0)? step : -step); 
} 
if (Math.abs(dy) > step) { 
tgtY = man.y + ((dy > 0)? step : -step);
}   
//Запоминаем положение 
oldX = man.x; 
oldY = man.y;   
//Смещаемся если новые координаты попадают в зону 
if (path.hitTest(man.x, tgtY, true)) { 
man.y = tgtY; 
} 
if(path.hitTest(tgtX, man.y, true)) { 
man.x = tgtX; 
}   
timeDx = man.x - oldX; 
timeDy = man.y - oldY; 
if(timeDx==0 && timeDy==0) { 
//Если не было смещения - в кадр где стоим 
man.gotoAndStop(5); 
}
else { 
man.play(); 
//Поворачиваемся по ходу движения 
rot = Math.atan2(timeDy, timeDx)*180/Math.PI; 
man._rotation = rot; 
}   
}

Ошибка при компиляции: TypeError: Error #1006: hitTest не является функцией.
at TestHit_fla::MainTimeline/moveCar()
man и path - два мувика, ман должен двигатся за курсором мышки по области пас.
0
TanaTiX
Модератор
2798 / 1652 / 168
Регистрация: 19.02.2011
Сообщений: 6,011
Завершенные тесты: 2
16.10.2013, 17:14 6
MovieClip и BitmapData, сравните имеющиеся методы.
1
Wells77
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
16.10.2013, 17:25  [ТС] 7
Если правильно понял, нада привести мувик пас к типу битмапа? Так?

ActionScript 3
1
2
3
//переводим зону проходимости в пиксельный вид
var pathBD = new BitmapData(path._width, path._height, false, 0x000000);
pathBD.draw(path);
потом синтаксис приминения правильный будет если пропишу:

ActionScript 3
1
2
3
if (pathBD.hitTest(man.x, tgtY, true)) { 
man.y = tgtY; 
}
Добавлено через 7 минут
Ёлы-палы, все намного проще и без танцев с бубном. Оказывается просто нада было использовать hitTestPoint(x,y, true) и обязательно указать третий параметр true что-б дырки в мувике учитывал

//Смещаемся если новые координаты попадают в зону
ActionScript 3
1
2
3
4
5
6
if (path.hitTestPoint(man.x, tgtY, true)) { 
man.y = tgtY; 
} 
if(path.hitTestPoint(tgtX, man.y, true)) { 
man.x = tgtX; 
}
и все работает чудесно. Спасибо за толчек в правильное направление.

 Комментарий модератора 
Для выделения кода используйте соответствующие теги
0
16.10.2013, 17:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2013, 17:25

Проверка на столкновение
Делаю проверку на столкновение - смысл в том, что в каждый объект вставлен...

Столкновение двух объектов
Как можно определить пересекаются 2 объекта или нет. Сами мувиклипы разной...

Столкновение с двумя и более объектами
Добрый вечер помогите с одной задачей вот я пишу код: import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru