Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Следование за мышкой (http://www.flasher.ru/forum/showthread.php?t=211135)

MarkEvans 01.07.2015 18:48

Следование за мышкой
 
Здравствуйте, Flasher'ы!
Недавно узнал о проекте под названием Agar.io (http://agar.io/) и решил слепить что-то подобное...
Но очень скоро по своей неопытности натолкнулся на интересную проблему - следование ГГ за мышкой.
В AS 2.0 это вылядело примерно так:
Код AS1/AS2:

speed = 5;
this.onEnterFrame = function() {
        dx = this._xmouse-pl._x;
        dy = this._ymouse-pl._y;
        Q = Math.atan2(dy, dx);
        pl._rotation = Q*180/Math.PI;
        dist = Math.sqrt(dx*dx+dy+dy);
        if (dist>speed) {
                valx = Math.cos(Q)*speed;
                // постоянная скорость
                valy = Math.sin(Q)*speed;
                pl._x += valx;
                pl._y += valy;
                        }
};

Сколько я не бился, так и не смог этот код портировать в AS 3.0...
И ещё - незнаю как сделать спавн еды для ГГ по всему полю
Всё чего я добился:
Код AS3:

import flash.display.MovieClip;
 
var myPl2: MovieClip = new pl2 ();
 addChild(myPl2);
 myPl2.x >= 550;
 myPl2.y >= 400;

Прошу не ругаться сильно - я начинающий и на форуме это мой первый вопрос

samana 01.07.2015 23:41

Цитата:

Сколько я не бился, так и не смог этот код портировать в AS 3.0...
А вы покажите то, что у вас не получилось и мы попробуем подсказать, что не так. А то если напишем код за вас, то вы не получите +1 к своему опыту, для прокачки as3 навыка.

Цитата:

И ещё - незнаю как сделать спавн еды для ГГ по всему полю
Здесь явно нужно идти в сторону случайности, то-есть Math.random()

dimarik 02.07.2015 00:00

Лучше псевдорандом )

MarkEvans 02.07.2015 19:29

Вложений: 1
Вот, как и просили - и AS 2, и в AS 3...
Жду ответов))

ZackMercury 02.07.2015 20:05

В agar.io не везде генерится еда, а кусками. Поэтому выбираем случайную точку на карте, и генерим относительно неё раз 100 в пределах 500-700 пикселей от точки во все стороны. И так несколько итераций.

samana 02.07.2015 22:35

Цитата:

Сообщение от MarkEvans (Сообщение 1184379)
Вот, как и просили - и AS 2, и в AS 3...
Жду ответов))

Исходники открыть не удалось, видимо ваша версия Flash выше моей. Но совсем не обязательно выкладывать исходники, ведь можно просто показать код, который нуждается в помощи.

MarkEvans 02.07.2015 22:40

Т.е. мы берём, допустим 4 точки на карте и относительно них прибаляем координаты и там спавним еду?
А, и ещё вопросик - как мне сделать подсчёт очков при съедании? Самая очевидная мысль, наверное - это создать переменную и с помощью if'а прибавлять по одному очку... Но вот как вывести это на экран?
Заранее спасибо за ответы.

Добавлено через 10 минут
Ок, выкладываю весь код:
Версия AS3:

Код AS3:

stop();
 
import flash.display.MovieClip;
 
//▼ Это неудачная попытка реализовать тот самый спавн еды... ▼
 
//stage.addEventListener(Event.ENTER_FRAME, apelsin);
//function apelsin (e:Event) {
//        var myPl2: MovieClip = new pl2 ();
// addChild(myPl2);
//  myPl2.x = Math.random();
//  myPl2.y = Math.random();
//}
 
// ▼ Единственное, что я придумал для следования ГГ за курсором ▼
 
stage.addEventListener(Event.ENTER_FRAME, apelsin);
  function apelsin (e:Event) {
        Mouse.hide();
        pl.x = mouseX;
        pl.y = mouseY;
}
 
//P.S
//Да, код ужасен, но я новичёк в этом деле, и да - мне 14 лет))
//Так что я себя частично оправдываю...

И версия AS2:

Код AS1/AS2:

speed = 5;
Mouse.hide();//Прячем мышь
this.onEnterFrame = function() {
        dx = this._xmouse-pl._x;
        dy = this._ymouse-pl._y;
        Q = Math.atan2(dy, dx);
        pl._rotation = Q*180/Math.PI;
        dist = Math.sqrt(dx*dx+dy+dy);
        if (dist>speed) {
                valx = Math.cos(Q)*speed;
                // постоянная скорость
                valy = Math.sin(Q)*speed;
                pl._x += valx;
                pl._y += valy;
        }
};
 
// ▼ А это две глупых попытки спрятать "еду" ▼
 
/*if (pl._x = eda._x) {
        eda.visible = false;
}
if (pl._y = eda._y) {
        eda.visible = false;
}*/

 
 
if (pl.hitTestPoint(eda._x, eda._y)) {
        eda.visible = false;
}


samana 02.07.2015 23:28

Код AS3:

Mouse.hide();
 
var speed:float = 0.5; //скорость 0 - не двигается,  1-мгновенно перемещается
 
addEventListener(Event.ENTER_FRAME, apelsin);
 
function apelsin(e:Event)
{
        //Mouse.hide(); нет смысла каждый кадр скрывать мышь
 
        //pl.x = mouseX;
        //pl.y = mouseY;
 
        //можно и так, для плавного результата
        pl.x += (mouseX - pl.x) * speed;
        pl.y += (mouseY - pl.y) * speed;
}


MarkEvans 02.07.2015 23:42

Спасибо большое, пойду пробовать, только вот не понял, что делает
Цитата:

var speed:float = 0.5;

samana 03.07.2015 00:04

Цитата:

Сообщение от MarkEvans (Сообщение 1184392)
Спасибо большое, пойду пробовать, только вот не понял, что делает

Ох... перепутал с другим языком. Нужно вместо float прописать Number.


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

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