![]() |
|
||||||||||
|
|||||
|
Вот призадумался, смогём ли реализовать отскок от припятсвия неизвесной формы?.. .
хм.. Скажем есть мяч(_root.ball) есть препятсвие (_root.smth) чур я начну onClipEvent (enterFrame) { _x+=xSpeed; _y+=ySpeed; if(_root.ball.hitTest(_x,_y,1) { ... кто продолжит ? ![]()
__________________
Генч. |
|
|||||
|
...чудиться мне что это не есть реально =\
__________________
Генч. |
|
|||||
|
...хм. ради експеремента пихнул
xSpeed*=-1; ySpeed*=-1; } - работает можно сказать. глючновато
__________________
Генч. |
|
|||||
|
эхохо... сам шучу и сам смеюсь
маленький апгрэйт if(_root.bort.hitTest(_x,_y,1)) { if(_root.bort.hitTest(_x+_width*2,_y,1)||_root.bort.hitTest(_x-_width*2,_y,1)){ xSpeed*=-1;_x=x0; } if(_root.bort.hitTest(_x,_y+_height*2,1)||_root.bort.hitTest(_x,_y-_height*2,1)){ ySpeed*=-1;_y=y0; }
__________________
Генч. |
|
|||||
|
Регистрация: Jan 2002
Сообщений: 1,323
|
Я бы на твоём месте создал бы клип размером с точку, прохиттестил бы препятствие и оно перестало бы быть "перпятствием неизвестной формы".
Хотя на самом деле я бы придумал более оптимальный алгоритм прощупывания ![]() |
|
|||||
|
я придумал более оригигинальный способ, но не получилось довисти до ума...
что то было типа for(i=0;i<=360;i+=20){ ii=i*(Math.PI/180); if(_root.ball.hitTest(_x+Math.sin(ii)*maxspeed){ _x+=Speed*Math.sin(ii); } _root.ball.hitTest(_y+Math.cos(ii)*maxspeed){_y+=Speed*Math.cos(ii); } } этот код 99.99% не работает. это так чтоб идею передать. мож каво наведет на мысли?
__________________
Генч. |
|
|||||
|
Регистрация: Jan 2002
Сообщений: 1,323
|
Я тут поэкспериментировал... Всё не так просто. Реальный хит будет только тогда, когда
(bort.hitTest(x,y,1) && ball.hitTest(x,y,1))==true причем именно x,y, а не _x,_y. Так что if(ball.hitTest(bort)) надо прощупывать каким местом ball какое место bortа зацепил (если зацепил, конечно). ![]()
__________________
ВКЛЮЧИ МОЗГИ!!! Одноразовых граблей не бывает. На большинство из них уже кто-то наступал. (c) Dindin |
|
|||||
|
Регистрация: Mar 2002
Адрес: и не проживаЄт
Сообщений: 58
|
Возможность FlashMX
onClipEvent (enterFrame) { if (_root.started && _root._currentframe==1) { with (_root.square) { // // keyboard controls if (Key.isDown(Key.DOWN)) { _y += 1; } if (Key.isDown(Key.UP)) { _y -= 1; } if (Key.isDown(Key.LEFT)) { _x -= 1; } if (Key.isDown(Key.RIGHT)) { _x += 1; } // // detect if edges of the player square are colliding with the maze walls if (walls.hitTest(getBounds(_root).xMax, _y, true)) { _x -= 1; } if (walls.hitTest(getBounds(_root).xMin, _y, true)) { _x += 1; } if (walls.hitTest(_x, getBounds(_root).yMax, true)) { _y -= 1; } if (walls.hitTest(_x, getBounds(_root).yMin, true)) { _y += 1; } // // detect if maze is finished if (_root.goal.hitTest(_x, getBounds(_root).yMax, true)) { _root.gotoandstop(3); } } } } |
|
|||||
|
Регистрация: Jan 2002
Сообщений: 1,323
|
Ха!.. getBounds... Шарик у нас, ШАРИК. И препятствие НЕИЗВЕСТНОЙ формы.
![]()
__________________
ВКЛЮЧИ МОЗГИ!!! Одноразовых граблей не бывает. На большинство из них уже кто-то наступал. (c) Dindin |
|
|||||
|
2tss:
хм.. чёта я уже не соображаю ничо %\\ вощм мысль упиралась в то что - используеца максСпид, по этму сразу везде вокруд хиттест оказаца не может, а может скажем только сверху, тода от 190 скажем до 350 градусов - будит Хит, оттуда и вычислица. т.е. это и получаеца - каким местом зацепил
__________________
Генч. |
![]() |
Часовой пояс GMT +4, время: 20:54. |
|
|
« Предыдущая тема | Следующая тема » |
|
|