Развитие игровой вспышки
Текущее время: Ср дек 13, 2017 3:30 am

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 152 ]  На страницу Пред.  1 ... 10, 11, 12, 13, 14, 15, 16  След.
Автор Сообщение
 Заголовок сообщения: Re: Анимации и другое
СообщениеДобавлено: Вт июл 18, 2017 4:23 pm 
Не в сети

Зарегистрирован: Вт окт 12, 2010 1:24 am
Сообщений: 1184
Откуда: Saint-Petersburg
У меня есть обьект, в нем функция update(). Как обращаются к глобальным переменным из под этого локального update?
MovieClip(root).a++; ? Или както можно по другому еще?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимации и другое
СообщениеДобавлено: Вс сен 03, 2017 8:15 am 
Не в сети
Аватар пользователя

Зарегистрирован: Ср май 02, 2012 8:18 pm
Сообщений: 3231
(maximum slowpoke)

starready писал(а):
к глобальным переменным из под этого локального update?


Все глобальные переменные снеси в отдельный класс и обяви их как static. Сможешь обращаться к ним откуда хочешь.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимации и другое
СообщениеДобавлено: Вс сен 03, 2017 8:50 am 
Не в сети

Зарегистрирован: Вт окт 12, 2010 1:24 am
Сообщений: 1184
Откуда: Saint-Petersburg
ADF писал(а):
(maximum slowpoke)

starready писал(а):
к глобальным переменным из под этого локального update?


Все глобальные переменные снеси в отдельный класс и обяви их как static. Сможешь обращаться к ним откуда хочешь.

А если я пишу в кадрах а не в классах (дадаязнаю) ?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимации и другое
СообщениеДобавлено: Вт окт 24, 2017 7:18 pm 
Не в сети

Зарегистрирован: Вт окт 12, 2010 1:24 am
Сообщений: 1184
Откуда: Saint-Petersburg
В общем у меня в мувике enemy 2 слоя (в первом кадре stop()) c 2 другими мувиклипами на них. Когда с помощью addchild я добавлю его на сцену 1 из 2х мувиклипов на разных слоях перевертываются как будто я сделал ему rotation, хотя я ничего такого не делал.

Я все перепробовал, как бы я в редакторе 1 из 2х мувиклипов не поворачивал - он все равно переворачивается на одну сторону, не как в редакторе.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимации и другое
СообщениеДобавлено: Ср окт 25, 2017 2:22 pm 
Не в сети

Зарегистрирован: Чт янв 22, 2015 7:34 pm
Сообщений: 209
Откуда: Одесса
starready писал(а):
В общем у меня в мувике enemy 2 слоя (в первом кадре stop()) c 2 другими мувиклипами на них. Когда с помощью addchild я добавлю его на сцену 1 из 2х мувиклипов на разных слоях перевертываются как будто я сделал ему rotation, хотя я ничего такого не делал.

Я все перепробовал, как бы я в редакторе 1 из 2х мувиклипов не поворачивал - он все равно переворачивается на одну сторону, не как в редакторе.

Может проблема не в редакторе? Куда конкретно вы добавляете мувиклип, может родитель имеет поворот и т.д. Проверьте все возможные и невозможные варианты.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Анимации и другое
СообщениеДобавлено: Ср окт 25, 2017 3:04 pm 
Не в сети

Зарегистрирован: Вт окт 12, 2010 1:24 am
Сообщений: 1184
Откуда: Saint-Petersburg
damager писал(а):
starready писал(а):
В общем у меня в мувике enemy 2 слоя (в первом кадре stop()) c 2 другими мувиклипами на них. Когда с помощью addchild я добавлю его на сцену 1 из 2х мувиклипов на разных слоях перевертываются как будто я сделал ему rotation, хотя я ничего такого не делал.

Я все перепробовал, как бы я в редакторе 1 из 2х мувиклипов не поворачивал - он все равно переворачивается на одну сторону, не как в редакторе.

Может проблема не в редакторе? Куда конкретно вы добавляете мувиклип, может родитель имеет поворот и т.д. Проверьте все возможные и невозможные варианты.


Я все по 1000 раз проверил.
Вот что у меня в редакторе, в мувике enemy.
Вложение:
screen1.jpg
screen1.jpg [ 236.11 KIB | Просмотров: 146 ]

А вот что получается в итоге.
https://imgur.com/cRTNtSa


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимации и другое
СообщениеДобавлено: Ср окт 25, 2017 3:12 pm 
Не в сети

Зарегистрирован: Чт янв 22, 2015 7:34 pm
Сообщений: 209
Откуда: Одесса
А код можно добавления на сцену посмотреть?Есть подозрение что вы просто меняете первый кадр(первого врага) поворот. А после остальные остаются в исходном.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Анимации и другое
СообщениеДобавлено: Ср окт 25, 2017 3:15 pm 
Не в сети

Зарегистрирован: Вт окт 12, 2010 1:24 am
Сообщений: 1184
Откуда: Saint-Petersburg
Код геймплея.
Код:
import flash.display.MovieClip;

var player_speed = 3.3;
var world = [];
var enemycount = 0;
var lastframe_for_collision = 0;
menu_quit.visible = false
var hero_move = 0;
var hero_move_x = 0;
background.mouseEnabled = false;
background.mouseChildren = false;
var shooting_delay_def = 15;
var shooting_delay = shooting_delay_def;
var player: MovieClip = new hero();
player.x = 320;
player.y = 670;

var screenshake_var = 0;
var screenshake_gamecont_def_x;
screenshake_gamecont_def_x = gameContainer.x
var screenshake_offset_x_min_def = -4;
var screenshake_offset_x_plus_def = 4;
var screenshake_offset_x_min = screenshake_offset_x_min_def;
var screenshake_offset_x_plus = screenshake_offset_x_plus_def;
var screenshake_drob = 0;
var screenshake_frame = 0

var enemydropnum = -1
//player.bound_m=20
//prevhp = 30;
//player.tag = Const.PLAYER;



hero_move_x = player.x;
gameContainer.addChild(player);
world.push(player);

heromovetoucharea.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
function onTouchBegin(e: TouchEvent) {
   hero_move_x = (e.stageX)
   hero_move = 1;
   //trace("local coords (relatives to mySprite): " + e.localX + " " + e.localY);
   //trace("global coords: " + e.stageX + " " + e.stageY);
}

heromovetoucharea.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
function onTouchMove(e: TouchEvent) {
   hero_move_x = (e.stageX);
   hero_move = 1;
}
heromovetoucharea.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);
function onTouchEnd(e: TouchEvent) {
   hero_move = 0;
}

function shoot() {

   snd_laser_1.play(0, 1);
   var bul: MovieClip;
   bul = new bullet();
   bul.health = 1;

   bul.x = player.x;
   bul.y = player.y;
   gameContainer.addChild(bul);
   world.push(bul);
   //mySound1.play(0,1);


}

function updateForces(): void {
   for (var i: int = 0; i < world.length; i++) {
      var a: MovieClip = world[i];

      /*
      if (a.tag == "FUEL_BANK") {
         trace("z");
         if (a.detaching == 0) {
            var b: MovieClip = world[a.root_enemy_pos];

            a.x = b.x;
            a.y = b.y;
         }
      }*/
      a.update_m();
   }



}

function updateBodies(): void {
   for (var i: int = 0; i < world.length; i++) {
      var a: MovieClip = world[i];
      if (a.y <= 0 && a.tag == "BULLET") {
         //Particles.addDamage(a.x, a.y);
         //mySound2.play(0,1);
         a.dead = 1;
      }
      /*
      if (a.tag == "ENEMY" && a.health <= 0) {
         a.dead = 1;

      }*/
      if (a.tag == "ENEMY" && a.y >= 600) {
         a.dead = 1;
         a.deadfrom = 1;
         create_smallportal(a.x, a.y)
      }
   }
}


function updatePhysics(): void {
   lastframe_for_collision++
   for (var i: int = 0; i < world.length; i++) {
      var a: MovieClip = world[i];

      for (var j: int = 0; j < world.length; j++) {
         var b: MovieClip = world[j];

         if (a == b) {
            continue;
         }

         detectCollision(a, b);
      }
   }
}


function detectCollision(a: MovieClip, b: MovieClip): void {
   var dx: Number = a.x - b.x;
   var dy: Number = a.y - b.y;

   var overlap: Number = Math.sqrt(dx * dx + dy * dy);
   var epsilon: Number = a.bound_m + b.bound_m;

   if (overlap <= epsilon) {
      a.onCollide(b);
      b.onCollide(a);
   }
}
/*
deadfrom
-1 - empty
0-hero's bullet
1-portal
2-self_oskolok
*/
function updatecheckifdead(): void {
   for (var i: int = 0; i < world.length; i++) {
      var a: MovieClip = world[i];
      if (a.dead == 1) {
         if (a.tag == "ENEMY") {
            if (a.deadfrom == 0) {
               createexplosion_1(a.x, a.y);
               snd_expl_1.play(0, 1);
               screenshake();
               if (a.en_type == 1) {

                  for (var randn = 0; randn < Math.random() * 7; randn++) {
                     create_oskolok(a);
                  }
               }
            }
            if (a.deadfrom == 1) {}
         }
         if (a.tag == "OSKOLOK") {
            if (a.deadfrom == 2) {
               create_oskolok_explosion(a);
            }

         }

         gameContainer.removeChild(a);
         world.splice(i, 1);
      };

   }
}
function create_oskolok_explosion(num) {
   var expl_osk = new explosion_oskolok();
   expl_osk.x = num.x;
   expl_osk.y = num.y;
   expl_osk.tag = "OSKOLOK_EXPLOSION";
   gameContainer.addChild(expl_osk);
   world.push(expl_osk);

}
function screenshake() {
   screenshake_var = 1;
}
function createexplosion_1(xnum, ynum) {
   var expl = new explosion();
   expl.tag = "EXPLOSION";
   expl.x = xnum;
   expl.y = ynum;
   gameContainer.addChild(expl);
   world.push(expl);
}
function create_smallportal(xnum, ynum) {
   var portal = new Portal_small();
   portal.tag = "PORTAL";
   portal.x = xnum;
   portal.y = ynum;
   gameContainer.addChild(portal);
   world.push(portal);
}
function addenemy(num, ai_num) {

   /*
   if (ai_num == 4) {
      var bank: MovieClip;
      bank = new fuel_bank()
      bank.root_enemy_pos = world.length + 1;

      gameContainer.addChild(bank);
      bank.tag = "FUEL_BANK";
      world.push(bank);
   }
*/
   var enemy: MovieClip;
   enemy = new Enemy()
   if (num == 1) {
      enemy.gotoAndStop(1);
   } else if (num == 2) {
      enemy.gotoAndStop(2);
   } else if (num == 3) {
      enemy.gotoAndStop(3);
   } else if (num == 4) {
      enemy.gotoAndStop(4);
   }
   enemy.en_type = num;
   enemy.ai = ai_num;
   enemy.health = 4;
   enemy.speed = 1.2;
   enemy.tag = "ENEMY";
   if (ai_num == 4 || ai_num == 5) {
      //enemy.fb.visible = true;
   } else {
      //enemy.fb.visible = false;
   }
   gameContainer.addChild(enemy);
   world.push(enemy);
   //enemy_cell.push(enemy);
}

function create_oskolok(enem): void {

   var osk: MovieClip = new oskolok();
   var dx: Number = (Math.random() * 800) - 400;
   var dy: Number = (Math.random() * 1400) - 700;
   osk.angle_m = Math.atan2(dx, dy);
   osk.tag = "OSKOLOK";
   osk.damage = 1;
   osk.speed = (Math.random() * 5) + 7;
   osk.life = Math.random() * 100;

   osk.x = enem.x;
   osk.y = enem.y;
   osk.velocity_x = Math.sin(osk.angle_m) * osk.speed;
   osk.velocity_y = Math.cos(osk.angle_m) * osk.speed;

   gameContainer.addChild(osk);
   world.push(osk);
}

this.addEventListener(Event.ENTER_FRAME, fnEF);
function fnEF(e: Event): void {
   if (hero_move == 1) {
      if (player.x < hero_move_x) {
         if (hero_move_x - player.x > player_speed) {
            player.x += player_speed;
         }
      } else if (player.x > hero_move_x) {
         if (player.x - hero_move_x > player_speed) {
            player.x -= player_speed;
         }
      }
   }
   shooting_delay--;
   if (shooting_delay <= 0) {
      shoot();
      shooting_delay = shooting_delay_def;
   }
   if (level == 0) {
      enemycount++;
      if (enemycount == 25) {
         var random_1 = Math.floor(Math.random() * 5);
         if (random_1 == 1) {
            addenemy(2, 1);
         } else {
            addenemy(1, 0);
         }
         enemycount = 0;
      }
   } else {

      enemycount++;
      if (enemycount == 25) {
         enemydropnum++
         if (levels[level][enemydropnum] != undefined) {
            if (levels[level][enemydropnum] == 0) {

            } else {
               var levelpath_temp = levels[level][enemydropnum];
               addenemy(enemy_path[levelpath_temp][0], enemy_path[levelpath_temp][1]);
               //trace(enemy_path[levelpath_temp][0] + "-" + enemy_path[levelpath_temp][1]);

            }
            enemycount = 0;
         }
      }
   }
   if (screenshake_var == 1) {
      screenshake_var = 2;

      screenshake_offset_x_min = screenshake_offset_x_min_def;
      screenshake_offset_x_plus = screenshake_offset_x_plus_def;
   }


   if (screenshake_var == 2) {
      screenshake_frame++

      if (screenshake_drob == 0) {
         screenshake_offset_x_min += 0.4;
         gameContainer.x = screenshake_gamecont_def_x + screenshake_offset_x_min;
         screenshake_drob = 1;
         if (screenshake_offset_x_min >= 0) {
            gameContainer.x = screenshake_gamecont_def_x;
            screenshake_var = 0
         }
      } else if (screenshake_drob == 1) {
         screenshake_offset_x_plus -= 0.4;
         gameContainer.x = screenshake_gamecont_def_x + screenshake_offset_x_plus;
         screenshake_drob = 0;
         if (screenshake_offset_x_plus <= 0) {
            gameContainer.x = screenshake_gamecont_def_x;
            screenshake_var = 0;
         }


      }
   }

   updateForces();
   updatePhysics();
   updateBodies()
   updatecheckifdead()
}
function clearall() {



   for (var i: int = 0; i < world.length; i++) {
      var a: MovieClip = world[i];
      gameContainer.removeChild(a);
   }
   world = [];
   this.removeEventListener(Event.ENTER_FRAME, fnEF);
}

menu_quit.but_yes.addEventListener(TouchEvent.TOUCH_BEGIN, quitf);
function quitf(e: TouchEvent) {
   NativeApplication.nativeApplication.exit();
}
menu_quit.but_no.addEventListener(TouchEvent.TOUCH_BEGIN, quitnof);
function quitnof(e: TouchEvent) {
   menu_quit.visible = false;
}
menu_quit.but_menu.addEventListener(TouchEvent.TOUCH_BEGIN, but_go_lvlselectf);
function but_go_lvlselectf(e: TouchEvent) {
   clearall();
   gotoAndStop(9);
   return;
}



Код enemy
Код:
package {
   import flash.display.*;
   import flash.filters.*;
   import flash.geom.*;
   import flash.display.MovieClip;
   import flash.events.*;
   import fl.motion.Color;
   import flash.geom.ColorTransform
   public class Enemy extends MovieClip {

      public var damage: int = 10;
      private var framen = 0;

      public var damagewhite = 0
      public var speed;
      public var en_t;
      public var startY;
      public var firsttime = 0;
      public var model;
      public var model1_xsp = 0;
      public var xspeed = 1;
      public var xstepcount = 0;
      public var xside = 0;
      public var startspeed = 9;
      public var bound_m = 23;
      public var shoot = 0;
      public var en_type = 1;
      public var bullet_damage
      public var shoottype = 1;
      public var accuracy
      public var health = 3;
      public var tag = "ENEMY";
      public var dead = 0;
      public var deadfrom;
      public var m_type = 20;

      public var ai

      public var numberOfTicks = 0;

      public var previousx = 0
      public var previousy = 0

      public var defx;

      public var lastframe_for_collision

      public function Enemy() {
         //this.rotation = 90;
         //this.scaleX=0.8;
         //this.scaleY=0.8;
      }

      public function update_m(): void {
         damagewhite--;
         if (damagewhite == 0) {
            var c: Color = new Color();
            c.setTint(0xFFFFFF, 0);
            this.transform.colorTransform = c;

         }
         if (ai == 0) {

            if (firsttime == 0) {

               this.x = (Math.random() * 450) + 50;
               this.y = 0;
               firsttime = 1;

            }
            if (firsttime == 1) {
               startspeed -= 0.4;
               if (startspeed < 1.2) {
                  firsttime = 2;
               }
               this.y += startspeed;
            }
            if (firsttime == 2) {

               defx = this.x
               //model = 0;
               firsttime = 3;

            }
            if (firsttime == 3) {

               numberOfTicks++;
               this.y += speed;
               this.x = defx + 50 * Math.sin(numberOfTicks * 0.01 * Math.PI);



               if (Math.floor(Math.random() * 200) == 1) {
                  bullet_damage = 1;
                  shoottype = 1;
                  accuracy = 50;
                  shoot = 1;
               }

            }
         } else if (ai == 1) {
            if (firsttime == 0) {
               this.x = (Math.random() * 450) + 50;
               this.y = 0;
               firsttime = 1;
            }
            if (firsttime == 1) {
               this.y += speed;
            }
         } else if (ai == 2) {
            if (firsttime == 0) {
               this.x = -20;
               this.y = 500;
               firsttime = 3;
            }
            if (firsttime == 3) {
               numberOfTicks++;
               this.y = 250 + 50 * Math.sin(numberOfTicks * 0.02 * Math.PI);
               this.x += speed * 1.5;
            }
         } else if (ai == 3) {
            if (firsttime == 0) {
               this.x = 560;
               this.y = 500;
               firsttime = 3;
            }
            if (firsttime == 3) {
               numberOfTicks++;
               this.y = 400 + 50 * Math.sin(numberOfTicks * 0.02 * Math.PI);
               this.x -= speed * 1.5;
            }
         } else if (ai == 4) {

            if (firsttime == 0) {

               this.x = (Math.random() * 450) + 50;
               this.y = (Math.random() * 450) + 50;
               firsttime = 1;
               

            } else if (firsttime == 1) {
               //this.fb.rotation=this.rotation+180;
               this.x-=3;
               numberOfTicks++;
               if(numberOfTicks==50){
                  //this.fb.gotoAndPlay(2);
               }
            }
         } else if (ai == 5) {

            if (firsttime == 0) {

               this.x = (Math.random() * 450) + 50;
               this.y = (Math.random() * 450) + 50;
               firsttime = 1;
               

            } else if (firsttime == 1) {
               //this.fb.rotation=this.rotation+180;
               this.x+=3;
               numberOfTicks++;
               if(numberOfTicks==50){
                  //this.fb.gotoAndPlay(2);
               }
            }
         }
         var angle = Math.atan2((this.y - previousy), (this.x - previousx));
         var angleInDegrees = angle * 180 / Math.PI;
         rotation = angleInDegrees;
         previousx = this.x
         previousy = this.y
      }
      public function checkifdead() {
         if (health <= 0) {
            dead = 1;
            deadfrom = 0;
         }
      }
      public function recieve_damage(num) {
         health -= num;
         damagewhite = 6;
         var c: Color = new Color();
         c.setTint(0xFFFFFF, 0.9);
         this.transform.colorTransform = c;
         /*
         if (en_type == 1) {
            this.body.gotoAndPlay(5);
         } else if (en_type == 2) {
            this.body.gotoAndPlay(5);
         }
*/
         checkifdead();

      }

      public function onCollide(b: MovieClip): void {
         if (b.tag == "BULLET") {
            recieve_damage(b.damage)
            //health -= b.damage;



         }
      }

   }
}


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимации и другое
СообщениеДобавлено: Ср окт 25, 2017 4:31 pm 
Не в сети

Зарегистрирован: Чт янв 22, 2015 7:34 pm
Сообщений: 209
Откуда: Одесса
Я считаю что загвоздка ключевая в том, что для перехода на другой кадр требуется следующий кадр(КЭП, о да), а у вас поворот программный происходит в предыдущий кадр, т.е оно вертит вашего врага один раз когда он находится на первом кадре. На самом деле по логике оно должно вертеть весь мувик, но попробовать глянуть стоит. Так надо копаться и пробовать. Но вся проблема как по мне с первым поворотом любого из мувиков, а не в редакторе.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Анимации и другое
СообщениеДобавлено: Ср окт 25, 2017 4:48 pm 
Не в сети

Зарегистрирован: Вт окт 12, 2010 1:24 am
Сообщений: 1184
Откуда: Saint-Petersburg
damager писал(а):
Я считаю что загвоздка ключевая в том, что для перехода на другой кадр требуется следующий кадр(КЭП, о да), а у вас поворот программный происходит в предыдущий кадр, т.е оно вертит вашего врага один раз когда он находится на первом кадре. На самом деле по логике оно должно вертеть весь мувик, но попробовать глянуть стоит. Так надо копаться и пробовать. Но вся проблема как по мне с первым поворотом любого из мувиков, а не в редакторе.


Видишь в гифке, я на сцену добавил клип enemy который совсем без кода, и все равно такая же фигня.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 152 ]  На страницу Пред.  1 ... 10, 11, 12, 13, 14, 15, 16  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB