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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.03.2014, 10:58
artem2033 вне форума Посмотреть профиль Отправить личное сообщение для artem2033 Найти все сообщения от artem2033
  № 1  
Ответить с цитированием
artem2033

Регистрация: Nov 2013
Сообщений: 75
По умолчанию Переменные в классе

Прошу помочь.
У меня есть класс в котором есть переменная, когда я пытаюсь узнать её значение из других классов, значение получается разным.
Значение я получаю следующим образом:
Код AS3:
//моя переменная
private var enemies:Array = new Array();
...
public function getNumEnemies():int
{
    return enemies.length;
}
Почему так происходит? Заранее спасибо.
Вот скрин:
Нажмите на изображение для увеличения
Название: Сохраненное изображение 2014-3-20_13-53-30.853.jpg
Просмотров: 100
Размер:	76.9 Кб
ID:	30617

Старый 20.03.2014, 11:44
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 2  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Need more cocaine code!
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

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

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

Старый 20.03.2014, 12:39
artem2033 вне форума Посмотреть профиль Отправить личное сообщение для artem2033 Найти все сообщения от artem2033
  № 4  
Ответить с цитированием
artem2033

Регистрация: Nov 2013
Сообщений: 75
класс консоли:
Код AS3:
package code.featherConsole 
{
	import code.control.ButtonsFunctions;
	import code.Enemies.CreateEnemy;
	import code.featherDebug_info.*;
	import flash.display.Sprite;
	import flash.events.*;
	import flash.text.TextField;
 
	public class activateConsole extends TraceThis
	{
		private var console:Sprite = new Sprite();
		private var _enemy:CreateEnemy = new CreateEnemy();
		private var _text:FunctionText = new FunctionText();
		private var _buttons:ButtonsFunctions = new ButtonsFunctions();
		private var inputText:TextField = new TextField();
		private var fl:Boolean = false;
		private var staticTexts:Array = new Array();
		private var commands:Array = new Array();
		public var consoleCreated:Boolean = false;
 
		public function activateConsole() 
		{
			addChild(_enemy);
		}
 
		public function consoleOn():void
		{
			if (!consoleCreated)
			{
				createConsole();
				inputText = _text.AddTextFieldInput(35, 360, true);
				console.addChild(inputText);
				inputText.addEventListener(KeyboardEvent.KEY_DOWN, _buttons.KeyDown);
				inputText.addEventListener(KeyboardEvent.KEY_UP, _buttons.KeyUp);
				helpCommands();
				consoleCreated = true;
				addChild(console);
			}
		}
 
		private function helpCommands():void
		{
			commands.push("Список команд :", "fps on - показывать FPS, fps off - не показывать FPS");
			commands.push("version of game - версия игры");
		}
 
		private function fillConsole(textFill:String):void
		{
			var staticText:TextField = new TextField();
			staticText = _text.AddTextFieldStatic(35, 360, ">" + textFill, 0x000000);
			console.addChild(staticText);
			staticTexts.push(staticText);
			sortList();
		}
 
		private function sortList():void
		{
			for (var i:int = 0; i < staticTexts.length; i++) 
			{
				staticTexts[i].y -= 20;
			}
			if (staticTexts.length >= 17)
			{
				console.removeChild(staticTexts[0]);
				staticTexts.splice(0, 1);
			}
		}
 
		public function consoleOff():void
		{
			if (consoleCreated)
			{
				inputText.removeEventListener(KeyboardEvent.KEY_DOWN, _buttons.KeyDown);
				inputText.removeEventListener(KeyboardEvent.KEY_UP, _buttons.KeyUp);
				removeChild(console);
				consoleCreated = false;
			}
		}
 
		public function UpdateConsole():void
		{
			if (fl)
			{
				_debugInfo.debugUpdate();
			}
			inputCommand(inputText.text);
                        //значения это просто координаты
			_enemy.enemyUpdate(45, 438, 583.25);
			trace(_enemy.getNumEnemies());
		}
 
		private function inputCommand(input:String):void
		{
			if (_buttons.ButtonsArr[6])
			{
				switch(input)
				{
					case "help":
						{
							for (var i:int = 0; i < commands.length; i++) 
							{
								fillConsole(commands[i]);
							}
							break;
						}
					case "fps on":
						{
							_debugInfo = new TraceThis(1, 1, 1);
							addChild(_debugInfo);
 
							fl = true;
							fillConsole("Fps on");
 
							break;
						}
					case "fps off":
						{
							if (fl)
							{
								removeChild(_debugInfo);
 
								fl = false;
								fillConsole("Fps off");
							}
							break;
						}
					case "add enemy":
						{
							fillConsole("Enemy added.");
 
							_enemy.createEnemy(/*Enemy,*/ "enemy", 100, 0.1, 80, 4, true);
 
							break;
						}
					case "":
						{
							break;
						}
					default :
						{
							fillConsole("Unknown command!");
							inputText.text = "";
							break;
						}
				}
				inputText.text = "";
			}
		}
 
		private function createConsole():void
		{
			var Text:TextField = new TextField();
			Text = _text.AddTextFieldStatic(35, 10, "Game Console", 0xFFFFFF);
			console.graphics.beginFill(0x73B3F2, 0.8);
			console.graphics.drawRect(10, 10, 350, 400);
			console.graphics.lineStyle(1, 0x8AC0F4);
			console.graphics.beginFill(0x8AC0F4, 0.5);
			console.graphics.drawRect(35, 30, 300, 350);
			console.addChild(Text);
			console.addEventListener(MouseEvent.MOUSE_DOWN, m_down);
			console.addEventListener(MouseEvent.MOUSE_UP, m_up);
		}
 
		private function m_down(e:Event):void
		{
			e.currentTarget.startDrag();
		}
 
		private function m_up(e:Event):void
		{
			e.currentTarget.stopDrag();
		}
	}
}
класс createEnemy:
Код AS3:
 
package code.Enemies 
{
	import flash.events.*;
	import flash.display.*;
	import code.featherAntimation.*;
 
	public class CreateEnemy extends MovieClip
	{
		private var gravity:Number = 0.2;
		private var friction:Number = 0.95;
		private var enemies:Array = new Array();
 
		public function CreateEnemy():void
		{
 
		}
 
		//графика, здоровье, урон, скорость передвижения, координаты, можно ли двигать. 
		public function createEnemy(/*graf:Class,*/ Name:String, hp:Number, damage:Number, massOfEnemy:Number, enemySpeed:Number, draggable:Boolean):void
		{
			var enemy:Object = new Object();
			enemy.Name = Name;
			enemy.graf = new FeatherClip();
			enemy.hp = hp;
			enemy.mass = massOfEnemy;
			enemy.damage = damage;
			enemy.enemySpeed = Math.random() * enemySpeed;
			enemy.draggable = draggable;
			enemy.buttonDown = false;
			enemy.state = 0;
			enemy.SpeedY = 0;
			enemy.SpeedX = 0;
			enemy.Attack = false;
			enemy.Y = generateCoor(600, 438);
			enemy.graf.y = enemy.Y;
			enemy.graf.x = -100 * Math.random();
 
			addChild(enemy.graf);
			enemies.push(enemy);
		}
 
		public function enemyUpdate(angle:Number, maxY:Number, toX:Number):void
		{
			enemyMove(toX, angle, maxY);
		}
 
		public function getNumEnemies():int
		{
			return enemies.length;
		}
 
		public function destroyEnemy(i:int):void
		{
			removeChild(enemies[i].graf);
			enemies.splice(i, 1);
		}
основной класс:

Код AS3:
package code
{
	import flash.utils.*;
	import code.control.ButtonsFunctions;
	import code.featherConsole.activateConsole;
	import flash.display.MovieClip;
	import flash.events.*;
	import code.Enemies.CreateEnemy;
 
	public class App extends MovieClip
	{
		private var _enemy:CreateEnemy = new CreateEnemy();
		private var _buttons:ButtonsFunctions = new ButtonsFunctions();
		private var _console:activateConsole = new activateConsole();
		private var nCount:int = 0;
 
		public function App()
		{
			if (stage)
			{
				init();
			}
			else
			{
				addEventListener(Event.ADDED_TO_STAGE, init);
			}
		}
 
		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			addEventListener(Event.ENTER_FRAME, enterFrame);
			stage.addEventListener(KeyboardEvent.KEY_DOWN, _buttons.KeyDown);
			stage.addEventListener(KeyboardEvent.KEY_UP, _buttons.KeyUp);
			addChild(_enemy);
			addChild(_console);
                        for (var i:int = 0; i < 100; i++) 
			{
				_enemy.createEnemy(/*Enemy,*/ "enemy", 100, 0.1, 80, 4, true);
			}
		}
 
		private function enterFrame(e:Event):void
		{
                        trace(_enemy.getNumEnemies());
			_enemy.enemyUpdate(45, 438, 583.25);
			_console.UpdateConsole();
			control();
		}
	}
}

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

Регистрация: Jul 2009
Сообщений: 149
Особо не углублялся в Ваш, так сказать, код.
Но на первый взгляд видно что у вас создаются два разных объекта класса CreateEnemy, у которых разные массивы enemies которые вполне могут иметь разную длину.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Вообще, это очень плохая привычка называть классы глаголами, а переменные не так, как называется класс.
Имя класса всегда должно быть существительным, а переменную экземпляр, лучше всего называть так, же, как называется класс, допустим CreateEnemy я бы переименовал хотя бы в EnemyManager, а переменную вместо _enemy назвал бы _enemyManager.
Эта привычка может сыграть злую шутку еще не раз.

Старый 20.03.2014, 14:51
artem2033 вне форума Посмотреть профиль Отправить личное сообщение для artem2033 Найти все сообщения от artem2033
  № 7  
Ответить с цитированием
artem2033

Регистрация: Nov 2013
Сообщений: 75
Спасибо большое вам) Уже переписываю код.

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

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

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


 


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


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