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

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

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

Регистрация: Feb 2017
Сообщений: 30
Attention Проблема с определением пересечения обекта

Ето снова я. Незнаю где писать определение с обектами, тоесть где myPatron пересекаеться c mina[i](тоесть с миной). Весь код програми представлен ниже, также напишите если где-то криво написа что-то, просто моя перая програма на AS, набираюсь опита.(Сам пробовал писать пересичения с обектом, но викидает ошибки все время, решил профи спросить.)



Код:
Код AS3:
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
 
var fire = false;
stop();
//Движение фона(Етот код можно не смотреть)
var myCosmo:MovieClip = new cosmo();
addChild(myCosmo);
myCosmo.x = 80;myCosmo.y = 200;
var TimeOfLastFire = getTimer();
stage.addEventListener(Event.ENTER_FRAME, go);
 
function go(e:Event){
	fon1.x += 4;fon2.x += 4;
	fon3.x += 6;fon4.x += 6;
	if(fon1.x >= 760){
		fon1.x = -200;
	}
	if(fon2.x >= 760){
		fon2.x = -200;
	}	
	if(fon3.x >= 760){
		fon3.x = -200;
	}
	if(fon4.x >= 760){
		fon4.x = -200;
	}	
}
 
////Клавиши
stage.addEventListener(KeyboardEvent.KEY_DOWN, pres);
function pres(e:KeyboardEvent){
	if(e.keyCode == 38){
		myCosmo.y -= 5;	
	}
	if(e.keyCode == 40){	
		myCosmo.y += 5;
	}
 
	//Создание патрона
	if(e.keyCode == 32){
		if(TimeOfLastFire+300<getTimer()){
			TimeOfLastFire = getTimer();
			var myPatron:MovieClip = new patron();
			addChild(myPatron);
			myPatron.x = myCosmo.x ;
			myPatron.y = myCosmo.y;
			stage.addEventListener(Event.ENTER_FRAME, fire);
			function fire(e:Event){
				myPatron.x += 10;
			}
		}
	}
}
 
 
//Создание мин
var timer:Timer = new Timer(5000, 0);
timer.addEventListener(TimerEvent.TIMER, spawn);
timer.start();
function spawn(e:TimerEvent){
	for(var i = 0;i<1;i++){
		var mina = [3];
		var coord_x = Math.random()*400+200;
		var coord_y = Math.random()*400;
		mina[i] = new boeprypas();
		addChild(mina[i]);
		mina[i].x = coord_x;mina[i].y = coord_y;
		stage.addEventListener(Event.ENTER_FRAME, polet);
		function polet(e:Event){
			for(var i = 0;i<1;i++){
				var xmov = (myCosmo.x - mina[i].x)/500;
				var ymov = (myCosmo.y - mina[i].y)/500;
				var angle = Math.atan2(xmov, ymov)*180/Math.PI;
				mina[i].x += xmov;
				mina[i].y += ymov;
				mina[i].rotation += 3;
			}
		}
	}
}


Последний раз редактировалось Wolsh; 13.02.2017 в 02:48. Причина: теги AS3
Старый 13.02.2017, 03:04
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1)
Код AS3:
var mina = [3];
Вы создали массив, у которого в нулевой ячейке хранится цифра 3. Мало того, поскольку этот код находится внутри цикла, массив будет создаваться заново при каждом витке цикла (сейчас, правда, этот виток один, так что ошибка незаметна).
2) не надо создавать переменные, которые будут использоваться тут же всего один раз. Можно было сразу написать
Код AS3:
mina[i].x = Math.random()*400+200;
mina[i].y = Math.random()*400;
3) Функции не надо встраивать внутрь других функций, они все должны быть на одном уровне.
__________________
Reality.getBounds(this);

Старый 13.02.2017, 18:29
ABEnergy вне форума Посмотреть профиль Отправить личное сообщение для ABEnergy Найти все сообщения от ABEnergy
  № 3  
Ответить с цитированием
ABEnergy

Регистрация: Feb 2017
Сообщений: 30
спасибо за помощь

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Если Вы планируете дальше изучать AS3, лучше начните сразу привыкать к правилам оформления кода. Так будет проще и Вам, и другим — например здесь, на форуме. Есть так называаемые "конвенции", в которых подробно расписаны правила. Но для начала хотя бы: с заглавной буквы называются ТОЛЬКО классы. Переменные всегда с маленькой буквы, так что "var TimeOfLastFire" — не пойдет. При объявлении переменных и функций указывается Тип значения.
Код AS3:
var fire:Boolean = false;
function go(e:Event):void {
Это позволяет компилятору находить ошибки еще на этапе сборки ролика. В редакторе Adobe Flash для этого нужно так же включить режим строгой компиляции. Сейчас у Вас просто вообще ничего не проверяется перед сборкой. Включите — посыпятся сообщения об ошибках. Неприятно, но это позволит их исправить. А исправлять придется в любом случае))
Код AS3:
var myPatron:MovieClip = new patron();
Здесь Вы создаете переменную внутри функции. Это называется "локальная переменная". Она будет существовать только те наносекунды, пока выполняется функция; в любом случае к ней нет никакого доступа вне этой функции. Если Вам нужно как-то пользоваться этим патроном в других функциях (например для того же определения столкновения), Вам нужно вынести объявление переменной в тело класса (на тот же уровень, где объявляются функции), а внутри функций Вы сможете менять ее значение, записывая в нее при необходимости ссылку на новый патрон. Когда таких объектов множество, используется массив — его так же объявляют в теле класса, а наполнять можно из других функций.

Добавлено через 3 минуты
Чтобы явно задать размер массива, нужно пользоваться полной формой конструктора
Код AS3:
var mina:Array = new Array(3); // создаем массив с тремя ячейками
__________________
Reality.getBounds(this);

Старый 13.02.2017, 21:44
ABEnergy вне форума Посмотреть профиль Отправить личное сообщение для ABEnergy Найти все сообщения от ABEnergy
  № 5  
Ответить с цитированием
ABEnergy

Регистрация: Feb 2017
Сообщений: 30
спасибо вам, только как включить строгий режим?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Меню Файл >> Параметры ActionScript
Название: Клип_108.png
Просмотров: 203

Размер: 32.1 Кб
__________________
Reality.getBounds(this);

Старый 14.02.2017, 23:28
ABEnergy вне форума Посмотреть профиль Отправить личное сообщение для ABEnergy Найти все сообщения от ABEnergy
  № 7  
Ответить с цитированием
ABEnergy

Регистрация: Feb 2017
Сообщений: 30
не понимаю почему не работает..
Отделил как ви и говорили(внутри лучше не работает), после появления 1 мини все происходит нормально(крутиться, двигаеться), а когда появляеться 2 , 1 перестает двигаться и так со всеми последующими...



var mina:Array = new Array();

var timer:Timer = new Timer(1000, 0);
timer.addEventListener(TimerEvent.TIMER, spawn);
timer.start();
function spawn(e:TimerEvent):void{
timer.start();
for(var i = 0;i<1;i++){
mina[i] = new boeprypas();
addChild(mina[i]);
mina[i].x = Math.random()*400+200;
mina[i].y = Math.random()*400; }

}

addEventListener(Event.ENTER_FRAME, polet);
function polet(e:Event):void{

for(var j = 0;j<mina.length;j++){
var xmov = (myCosmo.x - mina[j].x)/500;
var ymov = (myCosmo.y - mina[j].y)/500;
var angle = Math.atan2(xmov, ymov)*180/Math.PI;
mina[j].x += xmov;
mina[j].y += ymov;
mina[j].rotation += 3;
}
}

Старый 15.02.2017, 00:23
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 8  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
ABEnergy,если не хочешь чтоб твои темы продолжали закрывать, изучи, наконец, зачем и как работает вот эта кнопка:
Нажмите на изображение для увеличения
Название: Скриншот 2017-02-14 22.21.46.png
Просмотров: 97
Размер:	11.8 Кб
ID:	32645

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

Теги
Action script 3.0 , проблема
Опции темы
Опции просмотра

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

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


 


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


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