Я хочу создать игру 2d, в которой автомобиль перемещается по краю холма неправильной формы. Я хочу использовать базовый as3 (без физического движка, такого как Box2d или Nape). С большим количеством исследований я нашел this вещь, которая именно то, что я хочу, но есть только логика и исходный код. Может ли кто-нибудь помочь мне с частью кода, который может сделать это в as3? Также предложите, если есть лучшая альтернатива для получения желаемого результата.as3 обнаружение склона для неравномерных ландшафтов
ответ
Я сам не очень хорошо разбираюсь в таком коде, и я не могу сделать комментарий, потому что у меня короткая 7 репутация: '(но в статье, которую вы связали, есть другая ссылка на программу Worms-esque с кодом, который может вам помочь. Here's ссылка на этот сайт, и я также предоставлю соответствующий код, который вы можете увидеть, если он вам полезен.
Итак, у этой программы есть слушатель, если любая клавиша опущена и устанавливает логическое значение true, если это ключ, используемый вашей программой (перемещение, пространство для прыжка или что-то еще), что слушатель выглядит так:
public function key_down(e:KeyboardEvent) {
if (e.keyCode==37) {
left_key=true;
}
if (e.keyCode==39) {
right_key=true;
}
if (e.keyCode==32) {
space_key=true;
}
}
И тогда она имеет последующий прослушиватель при отпускании клавиши
public function key_up(e:KeyboardEvent) {
if (e.keyCode==37) {
left_key=false;
}
if (e.keyCode==39) {
right_key=false;
}
if (e.keyCode==32) {
space_key=false;
}
}
И, наконец, этап имеет ENTER_FRAME слушателя для перемещения персонажа, который запускает эту функцию
public function move_character(e:Event) {
//If left key is pressed, we'll move the character to the left
if (left_key) {
for (i=0; i<3; i++) {//Do you remember when we made the character fall? We had to move the character pixel by pixel
if (! terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x-6,character.y-10,1,17))) {
character.x--; /*If the character doesn't hit the ground, we can move left. However,
the character may be sunk under the ground. We have to lift it*/
while (terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x-5,character.y+9,10,1))) {
character.y--;
}
}
}
}
if (right_key) {//Well, that's the same for the right key
for (i=0; i<3; i++) {
if (! terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x+5,character.y-10,1,17))) {
character.x++;
while (terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x-5,character.y+9,10,1))) {
character.y--;
}
}
}
}
if (space_key&&! jumping) {//That's easy: if he isn't jumping and you press space, his speed will be negative and he'll jump
character_speed=-10;
jumping=true;//Now the character can't jump again
}
character_speed++;//Every frame we will increase character's speed
if (character_speed>0) {
//If the speed is positive, we will check a collision between the terrain and the rectangle below the character
for (i=0; i<character_speed; i++) {//We check the collision pixel by pixel...
if (! terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x-5,character.y+9,10,1))) {
character.y++;//If there isn't a collision, the character will fall
} else {
jumping=false;//If there's a collision with the ground, the character isn't jumping
character_speed=0;//The speed is 0, because the character hit the ground
}
}
} else {
for (i=0; i<Math.abs(character_speed); i++) {//If the speed is negative, the for loop won't work. We have to use Math.abs().
//Now we will check the collision between the terrain and the rectangle above the character
if (! terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x-5,character.y-10,10,1))) {
character.y--;
} else {
character_speed=0;//Well, that's the same: the character hit the ground
}
}
}
}
К сожалению, я не мог предоставить любой личный опыт, если вы хотите больше, то статья, которая была связана выше, предоставит больше информации.
- 1. Извлечение склона для индивидуального наблюдения
- 2. AS3 Обнаружение столкновений массивов
- 3. AS3: обнаружение свойств только для чтения
- 4. Как определить различные макеты для обоих ландшафтов?
- 5. Собственные функции плотности для ландшафтов на вокселе?
- 6. Приложения для ландшафтов Xcode 5/iOS 7
- 7. Обнаружение авторизации Dropbox в AS3
- 8. Расчет склона склонов
- 9. Swift & Spritekit: Создание склона
- 10. Pandas - Расчет наклонного склона
- 11. AS3 обнаружение столкновений не распознается
- 12. Эффективное обнаружение столкновений в AS3
- 13. Обнаружение виртуальной машины с AS3
- 14. Высокое качество увеличения единичных ландшафтов
- 15. Создание неравномерных случайных чисел
- 16. Объединить файлы неравномерных данных
- 17. Обнаружение перетаскивания и обнаружение длинного нажатия (XNA или as3)
- 18. Использование interp1 для неравномерных точек запроса
- 19. Обнаружение столкновений с использованием QuadTree в AS3
- 20. Как обнаружить обнаружение столкновения во вспышке AS3?
- 21. Обнаружение столкновений As3 с массивом мувиклипа?
- 22. Обнаружение разрыва строки в AS3 Input TextField
- 23. Найти оптимальное количество неравномерных ячеек
- 24. Обнаружение столкновения лабиринта с плитами AS3
- 25. AS3 Обнаружение нескольких клавиш клавиатуры Нажато
- 26. hitTestObject обнаружение столкновения не работает в as3!
- 27. AS3 Обнаружение границ в растровых изображениях
- 28. Обнаружение движения колесика мыши во Flash (AS3)
- 29. Как сделать обнаружение столкновений для полых (?) Мувиклипов во вспышке AS3?
- 30. Обработка неравномерных тиков в gnuplot