Просмотр полной версии : Как сделать препятствие?
lorddexon
09.10.2009, 00:38
В общем, во флэше я новичок) Подскажите, как сделать препятствие, мол когда объект соприкасается с другим объектом- стеной например, он останавливался? Я пробовал хитТестом, но че-то логики не хватает додумать.
alex_195
09.10.2009, 03:30
//ball_mc - движущийся объект, st_mc - стена
ball_mc.onEnterFrame = function() {
ball_mc._x += ball_mc._x*0.1;
if(ball_mc.hitTest(st_mc)) {
ball_mc._x = st_mc._x - 15;
trace("мувики пересеклись");
}
}
lorddexon
09.10.2009, 14:54
не пашет.( У меня шар проваливается медленно сквозь стенку, будто она из песка
http://www.flasher.ru/forum/showthread.php?t=130103
http://www.flasher.ru/forum/showthread.php?t=113458&highlight=hittest
http://www.freeactionscript.com/2009/05/pixel-perfect-collision-detection/
lorddexon
09.10.2009, 16:17
это немного не то. Мне надо, чтобы стена блокировала дальнейшее смещение шара по координате х/у при соприкосновении с шаром. мол
if (_root.block.hitTest(this))
{
вот тут я думал надо написать решение) а придумать его не могу
}
Код оформляйте тегами AS - смотреть неоформленный код никто не будет.
Тебе нужно это делать при помощи определения координат. Грубо говоря:
var player_mc:MovieClip; //Игрок (шарик)
var wall_mc:MovieClip; //Стена
if((player_mc._x+player_mc._width)>=wall_mc._x)
{
trace("Шарик попал в стену");
}
Так же и дальше, если стена слева, то:
if(player_mc._x<=wall_mc._x)
{
trace("Шарик попал в стену");
}
Аналогично с Y координатами. Если стена наверху
Добавлено через 2 минуты
Можно ожидать всех случаев если объект посередине, и грубо говоря квадратный или прямоугольный
var player_mc:MovieClip; //Игрок (шарик)
var wall_mc:MovieClip; //Стена
if((player_mc._x+player_mc._width)>=wall_mc._x)
{
trace("Шарик попал в стену");
}
if(player_mc._x<=wall_mx._x)
{
trace("Шарик попал в стену");
}
if((player_mc._y+player_mc._height)>=wall_mc._y)
{
trace("Шарик попал в стену");
}
if(player_mc._y<=wall_mc._y)
{
trace("Шарик попал в стену");
}
lorddexon
09.10.2009, 17:25
спасибо, это понятно. То есть при соприкосновении выводится надпись. А как сделать, чтобы при соприкосновении стена останавливала движения шара?
alex_195
11.10.2009, 01:31
lorddexon мой тебе совет... Я месяца четыре назад был таким как ты. Скачай книги по AS2 и почитай - почувствуешь себя другим человеком и не будешь задавать таких вопросов...
lorddexon
12.10.2009, 00:02
а можешь автора книги назвать? а то их полно) но там либо оч. поверхностно, либо непонятно))
Что может быть непонятного в школьной физике и геометрии?
Я так понимаю это игра сверху, тогда это:
//половина ширины героя (в данном случае у меня кружок)
var r = hero._width / 2;
// величина шага при ходьбе
var step = 5;
_root.onEnterFrame = function() {
if (Key.isDown(Key.RIGHT)) {
hero._x += step;
}
if (Key.isDown(Key.LEFT)) {
hero._x -= step;
}
if (Key.isDown(Key.UP)) {
hero._y -= step;
}
if (Key.isDown(Key.DOWN)) {
hero._y += step;
}
//ограничение сверху
while (wall.hitTest(hero._x, hero._y + r, true)) {
hero._y--;
}
//ограничение снизу
while (wall.hitTest(hero._x, hero._y - r, true)) {
hero._y++;
}
//ограничение справа
while (wall.hitTest(hero._x + r, hero._y, true)) {
hero._x--;
}
//ограничение слева
while (wall.hitTest(hero._x - r, hero._y, true)) {
hero._x++;
}
};
а на углах-то как тупит...
alex_195
14.10.2009, 03:57
Первое время все авторы непонятны. А основные авторы всем известны Гурский, Мук и т. д. Очень помогает livedocs из нашего форума - спасибо ребятам. Ежедневно долбай понемножку и всё придёт!
проще всего (и лучше всего) делать игру вид сверху через плитки двумерным массивом
а на углах-то как тупит...
Это же не идеальная система, а самая простая. Можно не делать углы такими острыми.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.