да, я знаю о подобной проблеме.
попробую доходчиво объяснить, в чем ее суть:
после определения касания, шарик необходимо «выдвинуть» за пределы ландшафта.
Сейчас я это делаю так: while(imgData[3] != 0) {
toX = (toX — stepX);
toY = (toY — stepY);
imgData = where.ctx.getImageData(toX,toY, 1,1).data;
}
то есть выгоняю только центр объекта за пределы ландшафта. Это неправильно. Как избавиться? есть 2 варианта:
1) более точно считать касание (а не по 1 пикселю как сейчас).
2) сильнее «выдвигать» объект из препятствия.
при первом способе мы теряем быстродействие. При втором шарик будет «дергаться» при каждом отскоке.
Оперируя этими двумя способами можно добиться желаемого эффекта. У каждого этот «желаемый эффект» будет своим.
под словами «не надо» подразумевалось не «тормознутость» алгоритмов или еще что-либо, а всего-навсего банальная неточность в определении направления отскока.
Вот пример:
если мы считаем полет ракеты, или еще что-нибудь важное, то не будем производить рассчеты «на глаз», так ведь?
верно и обратное, зачем нам знать точное направление отскока мячика, если необходимо всего лишь показать «видимость» правильного движения? (как в случае с данным примером)
Я показал всего лишь одну из возможных реализаций… использовать ее или нет — дело каждого. Лично меня она пока что устраивает.
Но за замечание спасибо, высказывание «Способ 2. Неправильный» действительно может ввести в заблуждение. Исправлюсь :)
нет, увы, понимаете не совсем правильно.
Я просто рассмотрел пример с кругом, хотя сам объект может быть любой формы (той, что Вы запихнете в object.buffer).
Соответственно после этого немного изменится просчет «нормали», поэтому объект себя будет вести, опять же, более или менее правдоподобно. Вот так может считаться «нормаль» при форме, отличной от круга:
попробую доходчиво объяснить, в чем ее суть:
после определения касания, шарик необходимо «выдвинуть» за пределы ландшафта.
Сейчас я это делаю так:
while(imgData[3] != 0) {
toX = (toX — stepX);
toY = (toY — stepY);
imgData = where.ctx.getImageData(toX,toY, 1,1).data;
}
то есть выгоняю только центр объекта за пределы ландшафта. Это неправильно. Как избавиться? есть 2 варианта:
1) более точно считать касание (а не по 1 пикселю как сейчас).
2) сильнее «выдвигать» объект из препятствия.
при первом способе мы теряем быстродействие. При втором шарик будет «дергаться» при каждом отскоке.
Оперируя этими двумя способами можно добиться желаемого эффекта. У каждого этот «желаемый эффект» будет своим.
Вот пример:
если мы считаем полет ракеты, или еще что-нибудь важное, то не будем производить рассчеты «на глаз», так ведь?
верно и обратное, зачем нам знать точное направление отскока мячика, если необходимо всего лишь показать «видимость» правильного движения? (как в случае с данным примером)
Я показал всего лишь одну из возможных реализаций… использовать ее или нет — дело каждого. Лично меня она пока что устраивает.
Но за замечание спасибо, высказывание «Способ 2. Неправильный» действительно может ввести в заблуждение. Исправлюсь :)
«более или менее правдоподобно», а не «как надо»
Я просто рассмотрел пример с кругом, хотя сам объект может быть любой формы (той, что Вы запихнете в object.buffer).
Соответственно после этого немного изменится просчет «нормали», поэтому объект себя будет вести, опять же, более или менее правдоподобно.
Вот так может считаться «нормаль» при форме, отличной от круга: