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

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

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

Регистрация: Nov 2012
Сообщений: 7
Question Помогите создать эффект выстрела

Помогите создать эффект выстрела. Суть такова есть враг (enemy), мувик состоит из двух кадров первый сам враг второй взрыв. Я пробовал соединить hitTestObject и gotoAndStop код выглядел так:
Код AS3:
if(pulaR.hitTestObject(enemy))
  {
   enemy.gotoAndStop (2);
   }
при этом выбивает такая ошибка 1120: Обращение несуществующого свойства pulaR если заменить pulaR на L5 то при столкновении с объектомвсе все работает. L5 это объект который и должен стрелять.

Вот весь код:
Код AS3:
var up,down,left,right = 0;
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownF);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUpF);
stage.addEventListener(Event.ENTER_FRAME,updatePosF);
 
function keyDownF(e:KeyboardEvent):void
{
 if (e.keyCode == Keyboard.UP)
 {
  up = 1;
 }
 if (e.keyCode == Keyboard.DOWN)
 {
  down = 1;
 }
 if (e.keyCode == Keyboard.RIGHT)
 {
  right = 1;
 }
 if (e.keyCode == Keyboard.LEFT)
 {
  left = 1;
 }
}
 
function keyUpF(e:KeyboardEvent):void
{
 if (e.keyCode == Keyboard.UP)
 {
  up = 0;
 }
 if (e.keyCode == Keyboard.DOWN)
 {
  down = 0;
 }
 if (e.keyCode == Keyboard.RIGHT)
 {
  right = 0;
 }
 if (e.keyCode == Keyboard.LEFT)
 {
  left = 0;
 }
}
 
function updatePosF(e:Event):void
{
 if (up == 1)
 {
  L5.y -=  10;
 }
 if (down == 1)
 {
  L5.y +=  10;
 }
 if (left == 1)
 {
  L5.x -=  10;
 }
 if (right == 1)
 {
  L5.x +=  10;
 }
}
//===========================================================>>>>
var enemyArr:Array= new Array();
var enemySpeed:Number=5;
const enemyNum:int = 40;
for (var i=0; i<enemyNum; i++)
{
 var enemy:MovieClip= new D2();
 enemyArr.push(enemy);
 enemyArr[i].x = Math.random() * -400 +400; 
 enemyArr[i].y = Math.random() * -7000;
 addChild(enemyArr[i]);
 addEventListener(Event.ENTER_FRAME,enemyMove);
}
function enemyMove(e:Event):void
{
 for (var i=0; i<enemyNum; i++)
 {
  var enemy=enemyArr[i];
  enemy.y+=enemySpeed;
 if(pulaR.hitTestObject(enemy))
  {
   enemy.gotoAndStop (2);  
  }
 }
}
//===========================================================>>>>
stage.addEventListener(MouseEvent.CLICK,vustril);
function vustril (e:MouseEvent):void{
var pulaRArr:Array= new Array();
var pulaRSpeed:Number=15;
const pulaRNum:int = 1;
for (var q=0; q<pulaRNum; q++)
{
 var pulaR:MovieClip= new pula(); 
 pulaRArr.push(pulaR);
 pulaRArr[q].x = L5.x;
 pulaRArr[q].y = L5.y;
 addChild(pulaRArr[q]);
 addEventListener(Event.ENTER_FRAME,pulaRMove);
}
function pulaRMove(e:Event):void
{
 for (var q=0; q<pulaRNum; q++)
 {
  var pulaR=pulaRArr[q];
  pulaR.y-=pulaRSpeed;
 }
}
}

Старый 06.11.2012, 05:07
spirit2 вне форума Посмотреть профиль Отправить личное сообщение для spirit2 Найти все сообщения от spirit2
  № 2  
Ответить с цитированием
spirit2

Регистрация: Dec 2009
Сообщений: 125
У вас pulaR объявлена в функции vustril (причем дважды), а использовать вы её пытаетесь в функции enemyMove.

Старый 06.11.2012, 21:05
DenLev вне форума Посмотреть профиль Отправить личное сообщение для DenLev Найти все сообщения от DenLev
  № 3  
Ответить с цитированием
DenLev

Регистрация: Nov 2012
Сообщений: 7
А как правильно надо записать?

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

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
вынести пулю за функции
Код AS3:
var pulaR:MovieClip;
function vustril (e:MouseEvent):void{
var pulaRArr:Array= new Array();
var pulaRSpeed:Number=15;
const pulaRNum:int = 1;
for (var q=0; q<pulaRNum; q++)
{
 pulaR = new pula(); 
 pulaRArr.push(pulaR); 
 pulaRArr[q].x = L5.x;
 pulaRArr[q].y = L5.y;
 addChild(pulaRArr[q]);
 addEventListener(Event.ENTER_FRAME,pulaRMove);
}
function pulaRMove(e:Event):void
{
 for (var q=0; q<pulaRNum; q++)
 {
  pulaR=pulaRArr[q];  
  pulaR.y-=pulaRSpeed;
 }
}
}

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

Регистрация: Nov 2012
Сообщений: 7
Спасибо уже работает,но появилась новая проблема функция enemyMove работает только после клика
к тому же появилась ошибка:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at litak_fla::MainTimeline/enemyMove()

Старый 08.11.2012, 10:51
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 6  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
переменная pulaR у вас создается в функции
Код AS3:
 var pulaR:MovieClip= new pula();
следовательно в другой функции ее не будет видно
Код AS3:
function enemyMove(e:Event):void
{
 for (var i=0; i<enemyNum; i++)
 {
  var enemy=enemyArr[i];
  enemy.y+=enemySpeed;
 if(pulaR.hitTestObject(enemy))  //вот здесь
  {
   enemy.gotoAndStop (2);  
  }
 }
}
если вы исправили как я вам говорил в предыдущем посте, то выложите новый код, будем уже в нем смотреть.

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

Регистрация: Nov 2012
Сообщений: 7
вот новый код:
Код AS3:
var enemy:MovieClip;
var enemyArr:Array= new Array();
var enemySpeed:Number=10;
const enemyNum:int = 40;
for (var i=0; i<enemyNum; i++)
{
 enemy = new D2();
 enemyArr.push(enemy);
 enemyArr[i].x = Math.random() * -400 +400; 
 enemyArr[i].y = Math.random() * -7000;
 addChild(enemyArr[i]);
 addEventListener(Event.ENTER_FRAME,enemyMove);
}
function enemyMove(e:Event):void
{
 for (var i=0; i<enemyNum; i++)
 {
  var enemy=enemyArr[i];
   enemy.y+=enemySpeed;
   if(pulaR.hitTestObject(enemy))
  {
   enemy.gotoAndStop (2);
   }
    if(enemy.y>=400)
  {
   enemy.x = Math.random() * -400 +400;
   enemy.y = Math.random() * -7000;
   enemy.gotoAndStop(1);
  }
 }
}
//===========================================================>>>>
var pulaR:MovieClip;
stage.addEventListener(MouseEvent.CLICK,vustril);
function vustril (e:MouseEvent):void{
var pulaRArr:Array= new Array();
var pulaRSpeed:Number=15;
const pulaRNum:int = 1;
for (var q=0; q<pulaRNum; q++)
{
 pulaR = new pula(); 
 pulaRArr.push(pulaR); 
 pulaRArr[q].x = L5.x;
 pulaRArr[q].y = L5.y;
 addChild(pulaRArr[q]);
 addEventListener(Event.ENTER_FRAME,pulaRMove);
}
function pulaRMove(e:Event):void
 
{
 for (var q=0; q<pulaRNum; q++)
 {
  pulaR=pulaRArr[q];  
  pulaR.y-=pulaRSpeed; 
 }
 }
}

Старый 08.11.2012, 17:03
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 8  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
здесь вы запускаете функцию enemyMove
Код AS3:
addEventListener(Event.ENTER_FRAME,enemyMove);
здесь обращаетесь к переменной pulaR
Код AS3:
 if(pulaR.hitTestObject(enemy))
  {
а создаете ее в другой функции, то есть чтобы заработал ваш код нужно сначала вызвать функцию
vustril которая создаст pulaR, а потом только вызвать функцию enemyMove, но я так понимаю это неправильно

вам нужно сделать проверку на существование пули так


Код AS3:
 var enemy=enemyArr[i];
   enemy.y+=enemySpeed;
 if(pulaR){
   if(pulaR.hitTestObject(enemy))
  {
   enemy.gotoAndStop (2);
   }
}
    if(enemy.y>=400)
  {
   enemy.x = Math.random() * -400 +400;
   enemy.y = Math.random() * -7000;
   enemy.gotoAndStop(1);
  }

Старый 09.11.2012, 02:43
DenLev вне форума Посмотреть профиль Отправить личное сообщение для DenLev Найти все сообщения от DenLev
  № 9  
Ответить с цитированием
DenLev

Регистрация: Nov 2012
Сообщений: 7
Спасибо вам теперь все работает.

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

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

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


 


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


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