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

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

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

Регистрация: Sep 2008
Сообщений: 102
По умолчанию Вывоз функции с обработчиком события без использования ООП

Всем привет.

Как можно вызвать функцию с обработчиком события без использования ООП ?

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

Регистрация: Aug 2007
Адрес: Ukraine, Kyiv
Сообщений: 643
Отправить сообщение для olexandr с помощью ICQ Отправить сообщение для olexandr с помощью MSN Отправить сообщение для olexandr с помощью Skype™
а конкретнее?
ооп - это классы, причем тут отдельная фнукция?
__________________
сайт, vk

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
Как можно вызвать функцию с обработчиком события без использования ООП ?
Точно так же, как и в ООП. Даже так скажу: Вы используете ООП везде и повсеместно в коде программы, просто об этом не догадываетесь
Ну и да, какой вопрос, такой ответ.
__________________
тут я

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

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Цитата:
ооп - это классы
ООП - это концепция программирования. Если вы умеете работать с классами, это ещё не значит, что вы знаете ООП.

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

Регистрация: Sep 2008
Сообщений: 102
Код AS3:
	stage.addEventListener(Event.ENTER_FRAME, bulletFire, false, 0, true);
function bulletFire(evt: Event): void{
	bullet.x+=Math.cos(bullet.rotation * Math.PI / 180) * 5;
	bullet.y+=Math.sin(bullet.rotation * Math.PI / 180) * 5;
}
// Стрельба персонажа
stage.addEventListener(MouseEvent.MOUSE_DOWN, Fire, false, 0, true);
function Fire(evt: MouseEvent): void {
	var bullet:MovieClip = new Bullet ();
	addChild(bullet);
	bullet.rotation = soldier.rotation;
	bullet.x = soldier.x + Math.cos(bullet.rotation * Math.PI / 180) * 25;
	bullet.y = soldier.y + Math.sin(bullet.rotation * Math.PI / 180) * 25;
	soldier.soldier2.gotoAndPlay(11);
	soldier.soldier2.gun.play();
	bulletFire(evt) ------------------------- ДАННАЯ ФУНКЦИЯ НЕ ВЫЗВАЕТСЯ
}

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Функция-то наверняка вызывается, просто она понятия не имеет о bullet — локальной переменной из другой функции.
__________________
Reality.getBounds(this);

Старый 27.01.2015, 04:33
sersir вне форума Посмотреть профиль Отправить личное сообщение для sersir Найти все сообщения от sersir
  № 7  
Ответить с цитированием
sersir
 
Аватар для sersir

Регистрация: Sep 2008
Сообщений: 102
Как я понимаю надо использовать MovieClip(root) ?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
var bullet:MovieClip — локальная переменная другой функции. К ней нет и не может быть доступа ниоткуда, кроме как в теле той функции, в которой Вы ее объявили (создали). Мало того, она просто исчезает, как только функция отработает (десятые-сотые доли миллисекунды). Исчезает переменная, ссылка на клип, но не сам клип-объект.
Соответственно Вам нужно вывести ссылку на эту пулю либо в тело Класса (для общего пользования), либо передать его прямиком в функцию, которой эта ссылка нужна для работы с пулей.
Если пуля одна, достаточно вынести объявление переменной bullet в тело класса.
Если предполагается более одной, то стоит создать в теле класса массив, и заносить пули в него при создании.
__________________
Reality.getBounds(this);

Старый 31.01.2015, 19:00
sersir вне форума Посмотреть профиль Отправить личное сообщение для sersir Найти все сообщения от sersir
  № 9  
Ответить с цитированием
sersir
 
Аватар для sersir

Регистрация: Sep 2008
Сообщений: 102
Wolsh, спасибо большое за подробный ответ. А суть вопроса и была как это реализовать без использования ООП. Я использую процедурное программирование

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Вынести bullet за тело функции, тем самым лишив её титула локальной. Я ещё подписался по клику, чтобы она далеко не улетела.
Код AS3:
var bullet:MovieClip = new Bullet ();
function bulletFire(evt: Event): void{
	bullet.x+=Math.cos(bullet.rotation * Math.PI / 180) * 5;
	bullet.y+=Math.sin(bullet.rotation * Math.PI / 180) * 5;
}
// Стрельба персонажа
stage.addEventListener(MouseEvent.MOUSE_DOWN, Fire, false, 0, true);
function Fire(evt: MouseEvent): void {
	addChild(bullet);
	bullet.rotation = soldier.rotation;
	bullet.x = soldier.x + Math.cos(bullet.rotation * Math.PI / 180) * 25;
	bullet.y = soldier.y + Math.sin(bullet.rotation * Math.PI / 180) * 25;
	soldier.soldier2.gotoAndPlay(11);
	soldier.soldier2.gun.play();
	stage.addEventListener(Event.ENTER_FRAME, bulletFire, false, 0, true);
}
Только пуля вот одна. Потому что я против войны, и даже одной пули – много.

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

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

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


 


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


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