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

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

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

Регистрация: Jun 2014
Сообщений: 558
По умолчанию булевские значения

Что-то ни как не могу понять, где косячу. Вся задумка состоит в том, что бы при нажатии клавиши кораблик стрелял один раз (даже если зажали кнопку) и при отпускании стрелял во второй раз. работает только fn_fire, да и то, если зажать кнопку, вылетает очередь.

Код AS3:
var fireBoolean: Boolean = true;
var FireArray = new Array();
var speed_boll: Number = 35;
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, fn_fire);
function fn_fire(event: KeyboardEvent): void {
	if ((start_ship) && (event.keyCode == 90) && (fireBoolean = true)) {
		var bollF: boll_mc = new boll_mc();
		fireBoolean = false;
		var p: Point = stage.globalToLocal(ship.localToGlobal(new Point(0, 70)));
		bollF.x = p.x;
		bollF.y = p.y;
		bollF.scaleY = 0.6;
		bollF.scaleX = 0.6;
		bollF.rotation = ship.rotation;
		FireArray.push(bollF);
		this.addChild(bollF);
		trace("Код нажатой клавиши: " + event.keyCode);
 
	}
}
stage.addEventListener(KeyboardEvent.KEY_UP, fn_fire2);
function fn_fire2(event: KeyboardEvent): void {
	if ((start_ship) && (fireBoolean = false) && (event.keyCode = 90)) {
		var bollF: boll_mc = new boll_mc();
		fireBoolean = true;
		var p: Point = stage.globalToLocal(ship.localToGlobal(new Point(0, -70)));
		bollF.x = p.x;
		bollF.y = p.y;
		bollF.scaleY = 0.5;
		bollF.scaleX = 0.5;
		bollF.rotation = ship.rotation;
		FireArray.push(bollF);
		this.addChild(bollF);
		trace("Код нажатой клавиши: " + event.keyCode);
	}
}
addEventListener(Event.ENTER_FRAME, boll_action);
function boll_action(e: Event): void {
	var i: int = FireArray.length;
	while (i--) {
		var j: boll_mc = FireArray[i];
		j.x -= speed_boll * Math.cos(j.rotation / 180 * Math.PI);
		j.y -= speed_boll * Math.sin(j.rotation / 180 * Math.PI);
	}
}

Старый 10.09.2014, 10:39
sospamom вне форума Посмотреть профиль Отправить личное сообщение для sospamom Найти все сообщения от sospamom
  № 2  
Ответить с цитированием
sospamom

Регистрация: Jun 2008
Сообщений: 126
Надо == вместо =

Код AS3:
fireBoolean = true

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

Регистрация: Jul 2009
Сообщений: 149
Знак "=" это присвоение значения, а проверка на равенство - "=="

Я бы как то так сделал:

Код AS3:
 
	stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
	stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
 
	private var _keyIsPressed:Boolean = false;
 
 
	private function keyDownHandler(event:KeyboardEvent):void 
	{
		if (!_keyIsPressed) {
			fire("Fire on key DOWN");
			_keyIsPressed = true;
		}
	}
 
	private function keyUpHandler(event:KeyboardEvent):void 
	{
		fire("Fire on key UP");
		_keyIsPressed = false;
	}
 
	private function fire(mes:String):void
	{
		trace(mes);
	}


Последний раз редактировалось ObOs; 10.09.2014 в 10:52.
Старый 10.09.2014, 12:45
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 4  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
точно, не заметил своей ошибки, переписал код, возник другой глюк, экшн не понимает строчку
Код AS3:
if ((start_ship) && (e.keyCode == 90) && (fireBoolean == false)) {
если убрать e.keyCode == 90, то начинает работать стрелять почти как задумано, но выстрел срабатывает, если отпустить любую кнопку

Код AS3:
stage.addEventListener(KeyboardEvent.KEY_UP, fn_fire2);
function fn_fire2(e: KeyboardEvent): void {
	if ((start_ship) && (e.keyCode == 90) && (fireBoolean == false)) {
		var bollF: boll_mc = new boll_mc();
		var p: Point = stage.globalToLocal(ship.localToGlobal(new Point(0, -70)));
		bollF.x = p.x;
		bollF.y = p.y;
		bollF.scaleY = 0.6;
		bollF.scaleX = 0.6;
		bollF.rotation = ship.rotation;
		FireArray.push(bollF);
		this.addChild(bollF);
		fireBoolean = true;
	}
}

Старый 10.09.2014, 13:16
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 5  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
А где у Вас start_ship определена?

Старый 10.09.2014, 13:28
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 6  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
в другой части программы, после создания объекта, она принимает значение true, с ней проблем нет точно

Старый 10.09.2014, 13:31
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 7  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Цитата:
с ней проблем нет точно
В trace выводит её? Просто ругаться на эту строчку может только из-за этого свойства, остальное все нормально.

Старый 10.09.2014, 13:46
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 8  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
точно всё с ней в порядке, если посмотрите код в первом сообщении, то поймёте, что там две аналогичные функции, отличаются лишь координатами и слушателем, один реагирует на нажатие, а второй на отпускание клавиши, так же, если обратили внимание, то яв сообщении чуть позже указываю, что проблема в e.keyCode, так как после удаления его всё начинает почти нормально работать

Старый 10.09.2014, 13:59
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 9  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
А что по Вашему "не понимает"? Ошибку выдает или нет реакции?

Добавлено через 4 минуты
Покажите слушатель down.

Старый 10.09.2014, 14:07
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 10  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
весь код выложен уже выше
Код AS3:
if ((start_ship) && (e.keyCode == 90) && (fireBoolean == false)) {
итог этого выражения false
Код AS3:
if ((start_ship) &&  (fireBoolean == false)) {
итог этого выражения true, но мне нужно, что первое выражение при отпускании клавиши 90 имело true

при этом первое выражение даёт в первом слушателе значение true

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

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

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


 


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


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