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

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

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

Регистрация: Jan 2010
Сообщений: 26
По умолчанию public массив

Как можно создать public массив, чтоб его можно было изменять из других классов?

класс с массивом
Код AS3:
package myclass
{
 
	public class myglobal {
 
		public static const ww =700;
		public static const hh =700;
 
		public var enemyCrafts:Array;
 
			public function initArrays()
			{
				enemyCrafts = new Array(10);
			}
 
			public function addCraft(...)
			{
				enemyCrafts.push(...);
			}
 
}
 
}
класс с изменением массива
Код AS3:
package {
 
	import myclass.myglobal;
 
	public class screen extends Sprite {
		public function screen() {
 
			myglobal.initArrays();
			myglobal.addCraft(.....);
}
 
}
 
}
На что идет ответ:
1061: Call to a possibly undefined method initArrays through a reference with static type Class.
1061: Call to a possibly undefined method addCraft through a reference with static type Class.

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

Регистрация: Jun 2006
Сообщений: 400
Вам нужно создать static массив. Вместо public напишите static.

А в вашем примере вы обращаетесь к классу, а методы и массив написали для экземпляра класса. Сделайте методы и массив статик и будет работать.


Последний раз редактировалось proxiServer; 17.02.2010 в 18:25.
Старый 17.02.2010, 18:23
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 3  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Не вместо, а вместе
И названия классов принято писать с большой буквы.

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Если объявить массив как static var, то к нему можно будет обратиться из любого места программы
Код AS3:
public class MyGlobal {
 
public static var array:Array;
 
public static function createArray() {
MyGlobal.array = new Array();
}
 
}
Обращение к данному массиву:
Код AS3:
public class MyClass {
 
public function MyClass() {
// ... конструктор
}
 
public function addArrayElement(element:/* Ну например*/ MovieClip ) {
 
if(MyGlobal.array == null) {
MyGlobal.createArray();
MyGlobal.array.push(element);
}
 
}
 
}
__________________
...вселенская грусть

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

Регистрация: Jun 2006
Сообщений: 400
udaaff, ну можно и вместо, но будет warning) ошибся.

Старый 18.02.2010, 01:32
sltt вне форума Посмотреть профиль Отправить личное сообщение для sltt Найти все сообщения от sltt
  № 6  
Ответить с цитированием
sltt

Регистрация: Jan 2010
Сообщений: 26
Это продолжение :-|
Я сначала тоже пробовал static но выбивало ошибку, теперь я понял из-за чего.
Проблема вот в чем получилась


Есть класс

Код AS3:
craftProperties.as
package {
	public class craftProperties{
 
		public var craftID:Number;
		public var craftColor:Number;
		public var craftType:Number;
 
	}
 
}

10 таких классов нужно сохранить в массив который находится в классе myglobal

Код AS3:
myglobal.as
package {
 
	import myclass.craftProperties;
 
	public class myglobal {
 
		public static const ww =700;
		public static const hh =700;
 
		public static var allCraftProperties:Array;/////<<<<<<<<<<
 
 
			public static function initArrays()
			{
				allCraftProperties=new Array(10);
			}
 
			public static function addCraftProp(crfprop:craftProperties)
			{
				allCraftProperties.push(crfprop);
			}
	}
}

Делаю я так:
Код AS3:
	import myglobal;
	import craftProperties;
 
	myglobal.initArrays();			
 
	for (var i=0; i < 10 i++) {
		var crfpropEnemy:craftProperties=new craftProperties();
 
		crfpropEnemy.craftID=i;
		crfpropEnemy.craftType=1;
		crfpropEnemy.craftColor=0xFFFFFF;
 
		myglobal.addCraftProp(crfpropEnemy);
	}

А потом пытаюсь прочитать массив из 4-го класса

Код AS3:
craft.as
package {
 
	import flash.display.Sprite;
	import myclass.myglobal;
 
 
	public class craft extends Sprite {
 
 
		public function craft() {
 
			trace(myglobal.allCraftProperties[1].craftType);
 
		}
	}
}
На что получаю
Код AS1/AS2:
	TypeError: Error #1010: Термин не определен и не имеет свойств.
	at сraft()
Что я неправильно сделал?


Последний раз редактировалось sltt; 19.02.2010 в 04:46.
Старый 18.02.2010, 03:31
GentleFLASH вне форума Посмотреть профиль Отправить личное сообщение для GentleFLASH Найти все сообщения от GentleFLASH
  № 7  
Ответить с цитированием
GentleFLASH

Регистрация: Apr 2009
Сообщений: 117
Напиши так, возможно ситуация прояснится:

Код AS3:
craft.as
package {
 
	import flash.display.Sprite;
	import myclass.myglobal;
 
 
	public class craft extends Sprite {
 
 
		public function craft(){
 
                        trace("arr: " + myglobal.allCraftProperties);
                        trace("arr.length: " + myglobal.allCraftProperties.length);
                        trace("arr[1]: " + myglobal.allCraftProperties[1]);
 
			trace(myglobal.allCraftProperties[1].craftType);
 
		}
	}
}
Если myglobal.allCraftProperties равен null или undefined - массив еще не инициализирован. Если myglobal.allCraftProperties.length равен нулю, то в массиве еще нет элементов.
Следовательно экземляр класса craft создается раньше, чем выполняется вот это:

Код AS3:
	import myglobal;
	import craftProperties;
 
	myglobal.initArrays();			
 
	for (var i=0; i < 10 i++) {
		var crfpropEnemy:craftProperties=new craftProperties();
 
		crfpropEnemy.craftID=i;
		crfpropEnemy.craftType=1;
		crfpropEnemy.craftColor=0xFFFFFF;
 
		myglobal.addCraftProp(crfpropEnemy);
	}


Последний раз редактировалось GentleFLASH; 18.02.2010 в 03:37.
Старый 18.02.2010, 14:16
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 8  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Кстати, где то читал что злоупотреблять статичными переменными не стоит, это так?
Иногда стоишь перед выбором создать статичную переменную или просто скинуть ссылку на нее в пару конструкторов.

Старый 18.02.2010, 15:38
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 9  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Второе лучше.

Старый 18.02.2010, 16:16
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 10  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Второе лучше.
Да я догадываюсь Интересны причины этого "лучше".

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

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

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


 


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


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