![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 3
|
Здравствуйте, столкнулся с проблемой. Плиз хелпи ми ))
As3 изучаю не так давно Собственно трабла: Есть Document Class package { import flash.display.Sprite; // Класс Tetris public class Tetris extends Sprite { public var play_screen:Game; // Конструктор public function Tetris() { play_the_game(); } public function play_the_game() { if (play_screen) { removeChild(play_screen); play_screen = null; } play_screen = new Game(this); addChild(play_screen); } } } package { import flash.display.Stage; import flash.display.Sprite; import flash.display.MovieClip; import flash.events.TimerEvent; import flash.utils.Timer; import flash.events.*; public class Game extends Sprite { public var main_class:Tetris; var block:BlockType; // Конструктор класса Game public function Game(passed_class:Tetris) { main_class = passed_class; addEventListener(Event.ENTER_FRAME, render, false, 0, true); } // Game function render(e:Event):void { if (!isBlock) { // пробуем сгенерировать одну фигуру block = new BlockType(this); main_class.stage.addChild(block); } } // render() } } package {// Класс для типов блоков, фигур import flash.display.Stage; import flash.display.Sprite; import flash.events.*; import flash.ui.*; import flash.utils.Timer; import flash.events.TimerEvent; public class BlockType extends Sprite{ private var gameClass:Game; var stageRef:Stage; // конструктор public function BlockType (Cls:Game): void { gameClass = Cls; this.stageRef = gameClass.stage; makeBlock(); } // BlockType // строим блок на сцене function makeBlock () { for (var i:int = 0; i < 4; i++) for(var j:int = 0 ; j < 4; j++) { if(bMatrix[i] != null) if (bMatrix[i][j] != null && bMatrix[i][j] == 1) { var box:Box = new Box(this.stageRef); box.x = j*20; box.y = i*20; this.addChild(box); boxArray.push(box); } } } // makeBlock() function timerHandler (e:Event) { // удаляем боксы for each (var obj:* in boxArray) { gameClass.tetrisMatrix[(obj.x+this.x)/20][(obj.y+this.y)/20] = obj; obj.removeSelf(); removeSelf(); } } // timerHandler() // удаление блока private function removeSelf() : void { if (gameClass.contains(this)) gameClass.removeChild(this); } // removeSelf() } } package { import flash.display.Sprite; import flash.display.Stage; public class Box extends Sprite { private var stageRef:Stage; // Конструктор класса Box public function Box(stageRef:Stage) { this.stageRef = stageRef } // Box // удаление бокса public function removeSelf() : void { // if (stageRef.contains(this)) stageRef.removeChild(this); } // removeSelf() } } ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта. Косяк именно в методе removeSelf класса Box. Последний раз редактировалось KaBELSEA; 27.09.2009 в 13:47. |
|
|||||
|
даже разбираться не хочется, зачем такие жесткие связи, мне наверно уже не понять.
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет... |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
Первое:
То, что play_screen не равен null еще не говорит о том, что он есть в дисплей листе Надо так: if (play_screen && this.contains(play_screen)) { removeChild(play_screen); play_screen = null; } Хотя-бы так, хотя изначально пипец (к слову сказать обращения к родителям нужно свести к минимуму): Ну и да, в последнем классе раскомментируйте проверку.
__________________
#flasher@irc.trg.ru:6667 |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 3
|
Obi. Фенк, ошибку понял.
![]() Переписал все по нормальному.... Изменил класс Box не привязывался к родителю. И все норм. Оч рад, спасиб ))) Больше такой *****Код наврятли сюда выложу ![]() Добавлено через 13 минут Тему можно закрыть! |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|