Среда, 13 Ноября 2024, 10:44

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Столкновение объектов
DeveloperGameДата: Суббота, 27 Января 2018, 12:00 | Сообщение # 1
частый гость
Сейчас нет на сайте
Пытаюсь сделать так чтобы при столкновении в онлайн игре, героя с противником оба начинали двигаться в заданном направлении. В итоге противник просто отскакивает от героя на несколько пикселей. Разумеется все это можно сделать с помощью математических функций синуса и косинуса. Но я решил пойти другим путем и сделать это без синусов и косинусов. Кто нибудь знает как сделать плавное перемещения обоих персов?
Вот сам код:
Код

import flash.events.Event;

import flash.events.KeyboardEvent;

var b1:ball1;
var b2:ball2;
var dist_x, dist_y, minDist, distance;
var midpointX, midpointY;
var up, left, right, down;

createBalls();
var accelerator = 5;

function createBalls ()
{
   b1 = new ball1();
   addChild(b1);
   b1.x = 300;
   b1.y = 100;
   b1.speedx = b1.x;
   b1.speedy = b1.y;
   b2 = new ball2();
   addChild(b2);
   b2.x = 100;
   b2.y = 100;
   b1.addEventListener(Event.ENTER_FRAME, onEF);
   stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
   stage.addEventListener(KeyboardEvent.KEY_UP, onKU);
}
function onKD(e:KeyboardEvent)
{
    
    if(e.keyCode==87)
    {
  up = true;
    }
    if(e.keyCode==83)
    {
  down = true;
    }
    if(e.keyCode==65)
    {
  left = true;
    }
    if(e.keyCode==68)
    {
  right = true;
    }
}
function onKU(e:KeyboardEvent)
{
    if(e.keyCode==87)
    {
  up = false;
    }
    if(e.keyCode==83)
    {
  down = false;
    }
    if(e.keyCode==65)
    {
  left = false;
    }
    if(e.keyCode==68)
    {
  right = false;
    }
}

function onEF(e:Event)
{
    var bl:ball1 = e.currentTarget as ball1;
    
    
    
    if(up)
    {
  bl.speedy -= accelerator;
    }
    if(left)
    {
  bl.speedx -= accelerator;
    }
    if(down)
    {
  bl.speedy += accelerator;
    }
    if(right)
    {
  bl.speedx += accelerator;
    }
    
    
    dist_x = b2.x-bl.x;
    dist_y = b2.y-bl.y;
    
    minDist = (bl.width + b2.width) / 2;
    
    distance = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
    
    var normalX = dist_x / distance;
    var normalY = dist_y / distance;
    
    if (distance < minDist)
    {
  midpointX = (bl.x+b2.x)/2;
  midpointY = (bl.y+b2.y)/2;
  
  minDist = minDist - b2.width/2; //50
  
    b2.x = (midpointX+normalX*minDist);
  b2.y = (midpointY+normalY*minDist);
  
    }
    b1.x =  bl.speedx;
    b1.y =  bl.speedy;
}


Developer online game
CoreДата: Понедельник, 01 Июня 2020, 13:05 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
JenniferShrum, АУУУ!! Тема 18 года. Сейчас в бан улетишь.
За рекламу в том числе.


  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг