2012-06-19 4 views
0

Итак, я работаю над флеш-игрой, где я использую bitmapdata для определения обнаружения столкновений с рельефом. Идея состояла в том, чтобы иметь два набора рельефных плит, один с фактическим рельефом сверху и более простой, с несколькими основными цветами, чтобы определить столкновение. Таким образом, если герой вступает в контакт с определенным цветом на «карте высот», его движение может быть остановлено, замедлено, он может получить урон или масштабироваться вверх и вниз, чтобы показать разницу в высоте. Чтобы сделать это, мне нужно добавить целую кучу плиток высотных карт с помощью массива, так же как я добавляю сами плитки. Выполнение этого через bitmapdata оказалось намного сложнее, чем я ожидал, и я продолжаю сталкиваться с ошибками при использовании следующего кода.AS3 BitmapData Collision Detection

Это ошибка, которую я получаю: TypeError: Ошибка # 1010: термин неопределен и не имеет свойств.

Насколько я могу сказать, что это идет из следующего бита кода:

var bitmapData:BitmapData = new BitmapData(heightContainer.heightMapClip.width, heightContainer.heightMapClip.height); 

Но я понятия не имею, что я делаю неправильно. Вот код в полном объеме, хотя я не удосужился части массива все же, просто необходимо, чтобы получить эту работу первой, и я действительно хочу, чтобы попытаться выяснить, остальные для себя:

var heightMapClip = new heightMap(); 
heightContainer.addChild(heightMapClip); 
var heightData:String; 
var hContainer:Sprite = new Sprite(); 
heightMapClip.x=-200; 
heightMapClip.y=-200; 
var bitmapData:BitmapData = new BitmapData(heightContainer.heightMapClip.width, heightContainer.heightMapClip.height); 
bitmapData.draw(heightContainer.heightMapClip); 
var myHeightMap:Bitmap = new Bitmap(bitmapData); 

heightContainer.addChildAt(hContainer,0); 
heightContainer.hContainer.addChild(myHeightMap); 

heightContainer.hContainer.addEventListener(Event.ENTER_FRAME, onClick); 
function onClick(e:Event):void 
{ 
    var obj:Sprite = e.currentTarget as Sprite; 
    var myHeightMap:Bitmap = Bitmap(obj.getChildAt(0)); 
    var pixelValue:uint = heightContainer.myHeightMap.bitmapData.getPixel(mouseX,mouseY); 
    heightData=pixelValue.toString(16); 
    if(heightData=="99ff00"){ 
     trace("Collision Detected"); 
    } 
} 

Любая помощь по этому вопросу будет принята с благодарностью.

+0

Решил это случайно: D – vagabond80

ответ

1

высотаContainer.addChild (heightMapClip);

делая это, вы не добавляете свойство heightMapClip к heightContainer

heightContainer.heightMapClip.width это вызовет ошибку

, но это не будет (до тех пор, как она существует, и имеет свойство ширины:))

heightMapClip.width

наилучшие пожелания п.с. «Решить это случайно» не определяет решение. Напишите, что вы сделали, чтобы ответить на свой вопрос, чтобы другие могли видеть и учиться на нем.

+0

Я бы подумал, как я это решил: D Было 4 часа ночи, и я понятия не имею, что я сделал. Он просто возился с кодом и внезапно начал работать. – vagabond80