Беспонятия, если честно. Но Вы мне нравитесь. Накидал пример. Управлять стрелками.

Код AS3:
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Shape;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.ui.Keyboard;
/**
* ...
* @author Artem Shlagin
*/
[SWF(width="820", height="599", frameRate = "30", backgroundColor="#efefef")]
public class MyMain extends Sprite {
//ширина и высота вьюпорта
public static const VIEWPORT_SIZE:Point = new Point(820, 569);
private var _background:Sprite;
private var _gameWorld:Sprite;
private var _hero:Shape;
private var _keys:Object = { };
private var _bitmapData:BitmapData;
private var _bitmap:Bitmap;
public function MyMain() {
super();
super.stage.align = StageAlign.TOP_LEFT;
super.stage.scaleMode = StageScaleMode.NO_SCALE;
//рисуем бэкграунд с квадратиками, чтобы было видно где мы ходим
_background = new Sprite();
_background.graphics.beginFill(0xCED8E4);
_background.graphics.drawRect(0, 0, 2000, 2000);
_background.graphics.endFill();
var i:int = 10 * 10;
while (i--){
var obstacle:Shape = new Shape();
obstacle.graphics.beginFill(0x555555 * Math.random() + 0x555555);
obstacle.graphics.drawRect(0, 0, 50, 50);
obstacle.graphics.endFill();
obstacle.x = 100 * int (i / 10);
obstacle.y = 100 * (i % 10);
_background.addChild(obstacle);
}
//рисуем героя
_hero = new Shape();
_hero.graphics.beginFill(0xFFFFFF);
_hero.graphics.drawCircle(0, 0, 25);
_hero.graphics.endFill();
//кладем мир и героя в один контейнер
_gameWorld = new Sprite();
_gameWorld.addChild(_background);
_gameWorld.addChild(_hero);
//создаём битмапу для камеры
_bitmapData = new BitmapData(VIEWPORT_SIZE.x, VIEWPORT_SIZE.y);
_bitmap = new Bitmap(_bitmapData);
//добавляем не игровой мир, а камеру
// super.addChild(_gameWorld);
super.addChild(_bitmap);
//листенеры для клавиатуры, чтобы герой бегал
super.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
super.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
super.stage.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
}
private function keyHandler(event:KeyboardEvent):void {
_keys[event.keyCode] = event.type === KeyboardEvent.KEY_DOWN;
}
private function enterFrameHandler(event:Event):void {
//двигаем героя, если надо
const speed:Number = 10;
if (_keys[Keyboard.LEFT]) _hero.x -= speed;
if (_keys[Keyboard.RIGHT]) _hero.x += speed;
if (_keys[Keyboard.UP]) _hero.y -= speed;
if (_keys[Keyboard.DOWN]) _hero.y += speed;
//обновляем камеру
var centerPoint:Point = new Point(-_hero.x + VIEWPORT_SIZE.x * 0.5, -_hero.y + VIEWPORT_SIZE.y * 0.5);
//4 условия, чтобы блокировать сдвиг камеры в углах игрового мира
//(закоменти, если камера должна двигаться всегда)
if (centerPoint.y > 0) centerPoint.y = 0;
else if (centerPoint.y < -_gameWorld.height + VIEWPORT_SIZE.y) centerPoint.y = -_gameWorld.height + VIEWPORT_SIZE.y;
if (centerPoint.x > 0) centerPoint.x = 0;
else if (centerPoint.x < -_gameWorld.width + VIEWPORT_SIZE.x) centerPoint.x = -_gameWorld.width + VIEWPORT_SIZE.x;
var matrix:Matrix = new Matrix();
matrix.tx = int(centerPoint.x);
matrix.ty = int(centerPoint.y);
_bitmapData.fillRect(_bitmapData.rect, 0x00);
_bitmapData.draw(_gameWorld, matrix, null, null, _bitmapData.rect, true);
}
}
}