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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.07.2009, 14:48
kosmo_mishka вне форума Посмотреть профиль Отправить личное сообщение для kosmo_mishka Найти все сообщения от kosmo_mishka
  № 1  
Ответить с цитированием
kosmo_mishka
[+4 09.08.09]

Регистрация: Jul 2009
Сообщений: 5
По умолчанию проблема с обращением к массиву

Хочу сделать определение столкновений шейпфлегом но не получается обращение к массиву

вот сам массив

Код AS1/AS2:
var hitPoints = new Array(i);
hitPoints.push({x:1, y: 26});
hitPoints.push({x:19, y:32});
hitPoints.push({x:1, y:1});
hitPoints.push({x:24, y:1});
Вот шейпфлэг (кстати если изменить на определение одной точки то все работает например
Код AS1/AS2:
 
this.hitTest(_root.ship._x + 19, _root_ship._y + 20, true)
)



Код AS1/AS2:
if (this.hitTest(_root.ship._x+_root.ship.hitPoints[i].x, _root.ship.y+_root._ship.hitPoints[i].y, true))
{
trace("shapeflagHit");
}
ошибка в синтаксисе, но я только начал пользоваться ас2, и не могу найти, спасибо за помощь


Последний раз редактировалось kosmo_mishka; 18.07.2009 в 22:30.
Старый 18.07.2009, 14:49
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
kosmo_mishka, отредактируйте свой пост и оформите код тегами [as][/as].

Старый 18.07.2009, 14:55
kosmo_mishka вне форума Посмотреть профиль Отправить личное сообщение для kosmo_mishka Найти все сообщения от kosmo_mishka
  № 3  
Ответить с цитированием
kosmo_mishka
[+4 09.08.09]

Регистрация: Jul 2009
Сообщений: 5
отредактировал
а еще хотел спросить, вот шейпфлег с линией толщиной hairline работает не всегда, есть решение этой проблемы?
Ощущение как будто не хватает частоты кадров, хотя пробовал аж до 80 fps ставить...


Последний раз редактировалось kosmo_mishka; 18.07.2009 в 14:59.
Старый 18.07.2009, 20:59
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
_root и root не одно и тоже
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 18.07.2009, 22:29
kosmo_mishka вне форума Посмотреть профиль Отправить личное сообщение для kosmo_mishka Найти все сообщения от kosmo_mishka
  № 5  
Ответить с цитированием
kosmo_mishka
[+4 09.08.09]

Регистрация: Jul 2009
Сообщений: 5
пардон исправил... (копировал с другого форума где этот вопрос задавал, там никто не ответил, и там при создания поста потерялись некоторые знаки)

ну то есть не от этого не работает

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

Регистрация: Jan 2009
Сообщений: 1,651
ошибка в синтаксисе? какая ошибка-то?

Старый 07.08.2009, 20:56
kosmo_mishka вне форума Посмотреть профиль Отправить личное сообщение для kosmo_mishka Найти все сообщения от kosmo_mishka
  № 7  
Ответить с цитированием
kosmo_mishka
[+4 09.08.09]

Регистрация: Jul 2009
Сообщений: 5
неужели никто не знает?

Старый 08.08.2009, 01:12
  № 8  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
Цитата:
Сообщение от kosmo_mishka Посмотреть сообщение
Я имел ввиду что я неправильно написал массив и незнаю как правильно...
или можно так
Код AS1/AS2:
var hitPoints = new Array();
так и сделай
Цитата:
Сообщение от kosmo_mishka Посмотреть сообщение
потом в классе Ship
надо ли переменную делать public и обозначать что это класс[/as]
Поясни, о каком именно классе ты говоришь? Если о MovieClip, т.е. ship у тебя клип, то никаких пабликов в нем делать не надо. Но перед тем, как обращаться к переменным внутри такого клипа, ты должен убедиться, что они успели проинициализироваться (похожая тема недавно поднималась здесь)
Даже если ты не добавляешь ship с помощью attachMovie, все равно нужно время.
Можешь проверить это написав так:
Код AS1/AS2:
mc = _root.ship;
trace("Before > "+mc.hitPoints[1].x);
mc.onEnterFrame = function () {
	if(this.hitPoints != undefined) {
		trace("After > "+this.hitPoints[1].x);
		delete this.onEnterFrame;
	}
}
И раз уж на другом форуме код теряется, то будь добр добавляй на другие форумы код из "первоисточника", тогда может и отвечать будут охотнее.

Старый 08.08.2009, 18:10
kosmo_mishka вне форума Посмотреть профиль Отправить личное сообщение для kosmo_mishka Найти все сообщения от kosmo_mishka
  № 9  
Ответить с цитированием
kosmo_mishka
[+4 09.08.09]

Регистрация: Jul 2009
Сообщений: 5
Прочитал тему ту тему, не очень понял про то как проверить успевают ли переменные иницилизироваться...
Если можно поподробней.

Удалил пост с не очень правильным кодом.
Вот я переписал.
Класс ship
Код AS1/AS2:
 
           public var hitPoints:Array;
	public var i;
 
	function onLoad()
	{	
			var hitPoints = new Array();
			hitPoints.push({x:1, y:30});
			hitPoints.push({x:30, y:1});
			hitPoints.push({x:30, y:30});
			hitPoints.push({x:1, y:1});
           }
Класс border
Код AS1/AS2:
if (this.hitTest(_root.ship._x+_root.ship.hitPoints[i].x, _root.ship._y+_root.ship.hitPoints[i].y, true))
			{
					trace("hit");
			}
А вот шейпфлег с одной точкой работает
Код AS1/AS2:
				if (this.hitTest(_root.ship._x+1, _root.ship._y+1, true))
				{
						trace("hit");
				}
Добавлено через 11 минут
Добавил в екшнскрипт кадра код который ты предложил для проверки, трейсом вывелось
Before > undefined
если честно я не очень улавливаю суть.


Последний раз редактировалось kosmo_mishka; 08.08.2009 в 18:18.
Старый 09.08.2009, 12:13
  № 10  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
Цитата:
Сообщение от kosmo_mishka Посмотреть сообщение
Прочитал тему ту тему, не очень понял про то как проверить успевают ли переменные иницилизироваться...
Ну если у тебя ship не клип (т.е. класс типа MovieClip), а обычный класс, тогда та тема действительно неуместна. Просто ты делаешь проверку на столкновение, и я подумал что ship - это клип.

Цитата:
Сообщение от kosmo_mishka Посмотреть сообщение
Класс ship
Код AS1/AS2:
           public var hitPoints:Array;
	public var i;
 
	function onLoad()
	{	
			var hitPoints = new Array();
			hitPoints.push({x:1, y:30});
			hitPoints.push({x:30, y:1});
			hitPoints.push({x:30, y:30});
			hitPoints.push({x:1, y:1});
           }
Я сам не силен в классах AS 2.0., но конструкторы в них точно не так создаются. А слово "var" вообще делает переменную локальной в области фигурных скобок "{ }". Так что у тебя получатся просто два массива.
Вот рабочий код:
Код AS1/AS2:
var	hitPoints = new Array();	//массив который потом можно будет присвоить переменной класса
	hitPoints.push({x:1, y:30});
	hitPoints.push({x:30, y:1});
	hitPoints.push({x:30, y:30});
	hitPoints.push({x:1, y:1});
 
function ClassShip():Void{	//типо такой конструктор
		this.hitPoints = hitPoints;
		//если не создавать массив отдельно, то можно сделать так
		//this.hitPoints = new Array();	
		//this.hitPoints.push({x:1, y:30});
		//this.hitPoints.push({x:30, y:1});
		//и т.д.
 
}
var ship= new ClassShip();//создаем экземпляр класса
//тест
for(i=0;i<ship.hitPoints.length;i++){
	trace("x="+ship.hitPoints[i].x+" y="+ship.hitPoints[i].y);
}

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

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

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


 


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


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