Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.11.2012, 13:12
allex вне форума Посмотреть профиль Отправить личное сообщение для allex Найти все сообщения от allex
  № 1  
Ответить с цитированием
allex
[+3 05.12.12]

Регистрация: Mar 2012
Сообщений: 46
По умолчанию убрать объект с экрана?

Добрый день,уважаемые гуру.Столкнулся с такой проблемой,можете подсказать?
Вот пример главного класса(допустим игры) и класса героя:

Код AS3:
package 
 
{   
        import flash.display.*;
	import flash.events.*;
 
        public class Main  extends MovieClip
 
 
{
        public var hero;
 
 
        public function Main()
{
 
	 hero1 = new  hero(this);            
	 gamelevel.addChild(hero1);
 
 
..................................
 
 
         gamelevel.removeChild(hero1);
 
  }
 }
}
и героя:

Код AS3:
package  {
 
	import flash.display.*;
	import flash.events.*;
 
        public class hero extends MovieClip { 
 
        public var Main;
 
        var herobullet:bullet;
 
        public function hero(main) {
 
        Main = main;
 
        herobullet = new bullet;
        Main.addChild(herobullet);
 
..................................
 
  }
Вопрос состоит в том,что (только учусь)) в главном классе я создаю героя,и после всех манипуляций,я его через removeChild удаляю(конец уровня),но в классе героя создается объект пуля - herobullet.В самом классе hero,я не должен удалять herobullet,так как класс не знает когда конец уровня.
Удаляется ли herobullet с экрана ,когда я удаляю hero1 через removeChild?Или мне надо его удалить отдельно?Если да,то как я это должен прописать в классе Main?Спасибо

Старый 22.11.2012, 13:40
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Удаляется ли herobullet с экрана ,когда я удаляю hero1 через removeChild?Или мне надо его удалить отдельно?
Если пуля добавляется в контейнер героя, то да, удалится вместе с ним. Тут она добавляется в main, поэтому не удалится. Но добавить ее в Main нельзя. Она добавляется в экземпляр, а не в сам класс. Так что конструкция
Код AS3:
 Main.addChild(herobullet);
не будет работать
сработает эта:
Код AS3:
 main.addChild(herobullet);

П.с. вообще никогда не нужно называть классы с маленькой буквы. Это плохой тон. А в данном, конкретном случае еще и переменная hero называется как класс, это не допустимо.
Классы всегда именуются с большой буквы, переменные и функции с маленькой. Плюс к тому нужно типизировать переменные, а не писать просто var hero;


п.п.с. Для начала конечно можно не париться на счет того, что я напишу дальше, лучше разобраться с тем как вообще правильно именовать объекты, понять что регистр имеет значение, что такое контейнеры и как их используют. Но в дальнейшем лучше избегать передачи ссылок на главный класс куда-либо. Это приводит к большой связанности кода.

Старый 22.11.2012, 13:45
allex вне форума Посмотреть профиль Отправить личное сообщение для allex Найти все сообщения от allex
  № 3  
Ответить с цитированием
allex
[+3 05.12.12]

Регистрация: Mar 2012
Сообщений: 46
За плохой тон спасибо,буду соблюдать.Пуля не в контейнере.И как нужно типизировать переменную?

Старый 22.11.2012, 13:47
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Пуля не в контейнере
В контейнере. Любой объект являющийся наследником DisplayObjectContainer является контейнером. Sprite и MovieClip основные, и наиболее часто используемые контейнеры в ас3.

Цитата:
И как нужно типизировать переменную?
Вот так:
Код AS3:
var hero:Hero;
Но для начала нужно переименовать класс hero в Hero

Старый 22.11.2012, 13:58
allex вне форума Посмотреть профиль Отправить личное сообщение для allex Найти все сообщения от allex
  № 5  
Ответить с цитированием
allex
[+3 05.12.12]

Регистрация: Mar 2012
Сообщений: 46
Спасибо,значит - gamelevel.removeChild(hero1),я удаляю сразу и herobullet?

Старый 22.11.2012, 14:03
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
если они оба добавлены в gamelevel, то да. Но удалятся они только с экрана. В памяти они так же будут болтаться и процессорные ресурсы так же будут отжирать, если на них где-то останутся ссылки. Если ссылок нет, никакие слушатели не подписаны, то их при необходимости снесет сборщик мусора

Старый 22.11.2012, 14:11
allex вне форума Посмотреть профиль Отправить личное сообщение для allex Найти все сообщения от allex
  № 7  
Ответить с цитированием
allex
[+3 05.12.12]

Регистрация: Mar 2012
Сообщений: 46
hero = null; - это поможет? или надо еще отследить все ссылки и их тоже удалять?

Старый 22.11.2012, 14:17
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
hero = null;
занулит только ссылку на объект.
Если на него подписаны слушатели, то он не удалится. Если слушателей нет, ни в какие массивы он не добавлен, то это разрешит сборщику мусора его удалить.

Старый 22.11.2012, 14:42
allex вне форума Посмотреть профиль Отправить личное сообщение для allex Найти все сообщения от allex
  № 9  
Ответить с цитированием
allex
[+3 05.12.12]

Регистрация: Mar 2012
Сообщений: 46
Все огромное и человеческое спасибо!!!

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:42.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.