![]() |
|
||||||||||
|
|
|
|||||
|
есть 2 клипа. 1 клип управляется с клавы-гл герой. Второй клип-это окружаюший мир. я сделал,чтобы гл герой падал на мир и не проваливался сквозь него (по оси Y), но зато по оси X он проходит насквозь.Вот код и swf приатачен.
Я уже не пойму как сделать, чтобы гл герой не проваливался в мир не через Y и не через X. И еще почему то он иногда проваливается в мир по Y, но недоконца,если подпрыгнуть,то все становится как надо.Откликнитесь плиз. onClipEvent (load) {
speed = 2;
power = 10;
yspeed = 0;
gravity = 1;
sunken = 0;
}
onClipEvent (enterFrame) {
//управление с клавы
if (Key.isDown(Key.UP)) { //прыжок
_root.hero._y -= power;
}
if (Key.isDown(Key.LEFT)) { //влево
_x -= speed;
}
if (Key.isDown(Key.RIGHT)) {//вправо
_x += speed;
}
//====конец упр
//условия ПРИ СТОЛКНОВЕНИИ
if (sunken == 0) {
yspeed += gravity;
_root.hero._y = _y+yspeed; //продолжить падение
} else {
_root.hero._y = _y; //остановить героя
}
//проверка столкновения
if (_root.enviroment.hitTest(_x,_y+10,true)) { //столкновения произошло
sunken = 1;
yspeed = 0; //отключить скорость по У
} else {
sunken = 0;
}
}
|
|
|||||
|
Регистрация: Nov 2008
Адрес: Москва
Сообщений: 92
|
первая проблема в том что герой при падении каждый раз продвигается сразу на несколько пикселей прежде чем происходит хитТест. косвенным подтверждениемэтому может служить то что величина "провала" зависит от "мощности прыжка". тобишь на предыдущей итерации хит тест не сработал, на следующей он уже перепрыгнув десяток пикселов со своей гравитацией по уши в земле. чтобы не ходил сквозь стены нужно после того как он попытался пойти в стену вернуть его на место. но при этом не перепутать горизонтальное столкновение и вертикальное. чтобы вертикальный хиттест не срабатывал можно определить перса на пиксель выше поверхности. но вопрос тогда в том где же У поверхности. поэтому лично я бы сделал блоки горизонтальные и вертикальные, каждые со своим хит тестом. это сильно все упростит. удачи.
Перечитал, подумал что может быть не понятно написано. Суть в том что онИнтерФрейм здесь - не айс. временные интервалы одинаковые, поэтому увеличение скорости достигается увеличением координаты на энное значение в итерацию. Удобнее будет если это будет СетИнтервал, тогда увеличения скорости(гравитации) можно будет добиться уменьшением временных промежутков, через которые вызывается увеличение координаты на единицу. тогда и хит тест будет работать адекватно. Последний раз редактировалось incorp; 08.06.2009 в 19:45. |
|
|||||
|
Возможно вам следует смотреть в сторону getPixel
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|