Сегодня на reddit.com была опубликована статья о точном пиксельном обнаружении столкновений в ActionScript 3 , которое делает часть обнаружения столкновений вашей проблемой.
Настоящая логика будет в том, что делать при обнаружении столкновения. Однако, вы когда-нибудь замечали, как в большинстве игр с боковой прокруткой используется плоская поверхность для ходьбы?
Одна идея (которая не требует обнаружения столкновений) - использовать карту высот, как идею. Вы можете использовать массив (или пиксели в текстуре), чтобы определить высоту каждого участка земли вдоль вашей поверхности. Когда ваш персонаж перемещается по сцене, вы просто индексируете положение персонажа в вашей карте высот.
// How many pixels each index of the heightMap contains.
// You'll probably want to use the same value as the distance
// your character moves when the move left/right key is pressed.
const SECTION_SIZE:int = 10;
// Fill this as a huge array with all the heights and
// the size of this will be (mapHorizontalLengthInPixels / SECTION_SIZE).
// Each element will be the distance from the top of the screen to
// place the character so it looks like it is standing on the ground.
var heightMap:Array = [ /* ... */ ];
// TODO: you might want to Tween to this value so it doesn't look chunky
character.y = heightMap[character.x / SECTION_SIZE];
Чтобы использовать текстуру вместо массива, вы просто помещаете каждый int
, который был бы помещен в массив heightMap
, в один пиксель объекта BitmapData. Преимущество использования текстуры в том, что вы можете хранить огромное количество информации в небольшом объекте BitmapData и использовать getPixel32 () для ее считывания. Вы можете сгенерировать карту один раз, сохранить ее (например, в виде png), а затем вставить ее в SWF.
Если вы хотите получить фантазию, и, возможно, вы захотите, если вам нужны платформы, мосты, движущиеся объекты и многое другое ... тогда используйте физический движок 2d. Есть несколько проектов с открытым исходным кодом, в том числе APE , Box2dAS3 , Fisix и FOAM . Кривая обучения будет выше, а кодирование сложнее, но в итоге оно может окупиться. Черт возьми, это сам опыт, чтобы написать один с нуля, если вы заинтересованы!