Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Примитивный АI, преследование главного героя (http://www.flasher.ru/forum/showthread.php?t=100121)

udaaff 22.08.2007 09:46

Crimsonland и АленШутор -- это игры на flash?

Eric Gurt 22.08.2007 10:49

Поставь 30 кадров в секунду у мувика ! :D

Optimist 22.08.2007 22:20

Не знаю поможет тебе это или нет, но я сейчас занимался падающими цветами. Примитивная по сути флешка: дублируем мув и задаем ему движение. Но когда количество цветочков переваливает за 150 весь комп начинает жутко тормозить, загрузка ЦП чуть ли на максимуме а флеш съедает 200 метров оперативки... Так вот по ходу тут все от компа зависит. Я уверен, что если твою флеху на гиге+ оперативки, 3 ГГц и 512 видяхе протестить то ничего дергаться не будет...

И кстати, Eric, fps здесь не при чем...

Если кто нить посоветует что делать было б очень здорово...

udaaff 22.08.2007 22:39

Цитата:

И кстати, Eric, fps здесь не при чем...
Почему это?

aQuestion 23.08.2007 03:11

замени
Код:

                this.xmov = bot_speed*Math.cos(ang);
                this.ymov = bot_speed*Math.sin(ang);
                this._x += this.xmov;
                this._y += this.ymov;

на
Код:

                this.xmov = bot_speed*Math.cos(ang*Math.PI/180);
                this.ymov = bot_speed*Math.sin(ang*Math.PI/180);
                this._x -= this.xmov;
                this._y -= this.ymov;

:bye:

Optimist 23.08.2007 16:11

Цитата:

Сообщение от udaaff
Цитата:

Сообщение от Optimist
И кстати, Eric, fps здесь не прич ем...

Почему это?

Неправильно выразился.... Менял я фпс от минимума до 50, кажется, и везде почти один и тот же результат... Минимум не снимает глюков, образованных, судя по всему, кодом...

_Nickromant_ 23.08.2007 17:32

Цитата:

Сообщение от udaaff
Crimsonland и АленШутор -- это игры на flash?

Вопрос не в этом, вопрос в том можно ли как-нибудь увеличить кол-во монстров до мин до 100 избежав тормозов. :(

Цитата:

Сообщение от Eric Gurt
Поставь 30 кадров в секунду у мувика !

По-моему тоже, тут это не причем, если бы тормозило, хоть при 1, хоть при 50 монстрах, тогда можно было думать на fps, а так нет :o

Цитата:

Сообщение от Optimist
Если кто нить посоветует что делать было б очень здорово...

+1 !!!!!!!!!!!!!!!!!!!!!!!!!!! Очень хочется!!!!!!
Цитата:

Сообщение от Optimist
Так вот по ходу тут все от компа зависит. Я уверен, что если твою флеху на гиге+ оперативки, 3 ГГц и 512 видяхе протестить то ничего дергаться не будет...

У меня 1 гиг оперативы, видео -256мб, проц. АтлонXP 3000+, и все равно виснет. Я почти уверен, что видел флеху, где врагов куча и не чего не тормозит, как найду, выложу.
Цитата:

Сообщение от aQuestion
замени
Код:
this.xmov = bot_speed*Math.cos(ang);
this.ymov = bot_speed*Math.sin(ang);
this._x += this.xmov;
this._y += this.ymov;
на
Код:
this.xmov = bot_speed*Math.cos(ang*Math.PI/180);
this.ymov = bot_speed*Math.sin(ang*Math.PI/180);
this._x -= this.xmov;
this._y -= this.ymov;

Спасибо, я с этим уже разобрался ( на первой странице подсказали), но это исправляет только дергание монстров.
Профи, подумайте, давайте решим проблему!!!

goarcade 23.08.2007 20:33

Посмотрел я твой исходник - не тормозит, даже когда ставишь 100 монстров.
Попробуй мой код. Если не будет тормозить - юзай:)
Код:

//массив для 100 монстров
var monsterList:Array = new Array(100);
function onEnterFrame() {
        // координаты игрока
        var playerX = _xmouse;
        var playerY = _ymouse;
        for (var i:Number = 0; i<monsterList.length; i++) {
                var monster:MovieClip = monsterList[i];
                var dx:Number = playerX-monster._x;
                var dy:Number = playerY-monster._y;
                var angle:Number = Math.atan2(dy, dx);
                monster._rotation = angle*180/Math.PI;
                //свойство: a>b == a*a>b*b
                if (dx*dx+dy*dy>50*50) {
                        monster._x += monster.speed*Math.cos(angle);
                        monster._y += monster.speed*Math.sin(angle);
                }
        }
}
//создаем монстров
for (var i:Number = 0; i<monsterList.length; i++) {
        var monster:MovieClip = createMonster("monster"+i, i);
        monsterList[i] = monster;
        monster._x = Math.random()*Stage.width;
        monster._y = Math.random()*Stage.height;
        var maxSpeed:Number = 2;
        var minSpeed:Number = 0.5;
        monster.speed = minSpeed+Math.random()*(maxSpeed-minSpeed);
}
function createMonster(name:String, depth:Number):MovieClip {
        var mc:MovieClip = _root.createEmptyMovieClip(name, depth);
        mc.lineStyle(1);
        mc.beginFill(Math.random()*0xcccccc,100);
        var r:Number = 10;
        mc.moveTo(-r,-r);
        mc.lineTo(r,0);
        mc.lineTo(-r,r);
        mc.endFill();
        return mc;
}


_Nickromant_ 23.08.2007 21:19

Цитата:

Сообщение от goarcade
Посмотрел я твой исходник - не тормозит, даже когда ставишь 100 монстров.
Попробуй мой код. Если не будет тормозить - юзай:)
Код:

//массив для 100 монстров
var monsterList:Array = new Array(100);
function onEnterFrame() {
        // координаты игрока
        var playerX = _xmouse;
        var playerY = _ymouse;
        for (var i:Number = 0; i<monsterList.length; i++) {
                var monster:MovieClip = monsterList[i];
                var dx:Number = playerX-monster._x;
                var dy:Number = playerY-monster._y;
                var angle:Number = Math.atan2(dy, dx);
                monster._rotation = angle*180/Math.PI;
                //свойство: a>b == a*a>b*b
                if (dx*dx+dy*dy>50*50) {
                        monster._x += monster.speed*Math.cos(angle);
                        monster._y += monster.speed*Math.sin(angle);
                }
        }
}
//создаем монстров
for (var i:Number = 0; i<monsterList.length; i++) {
        var monster:MovieClip = createMonster("monster"+i, i);
        monsterList[i] = monster;
        monster._x = Math.random()*Stage.width;
        monster._y = Math.random()*Stage.height;
        var maxSpeed:Number = 2;
        var minSpeed:Number = 0.5;
        monster.speed = minSpeed+Math.random()*(maxSpeed-minSpeed);
}
function createMonster(name:String, depth:Number):MovieClip {
        var mc:MovieClip = _root.createEmptyMovieClip(name, depth);
        mc.lineStyle(1);
        mc.beginFill(Math.random()*0xcccccc,100);
        var r:Number = 10;
        mc.moveTo(-r,-r);
        mc.lineTo(r,0);
        mc.lineTo(-r,r);
        mc.endFill();
        return mc;
}


Исходник который выложил я и у меня не тормозит, но стоит кружки заменить на боллее сложный и красивый обьект, как все тормозить начинает.
Твой код, хоть аккуратние и красивей моего, но результат то же заменил рисование треугольников подгрузкой клипа монстра из библиотеки и все опять начало тупить (((((, не ужели компилятор flash'a, такой не совершенный !?!?!

goarcade 23.08.2007 22:22

А ты попробуй использовать растровые картинки. Может они будут быстрее отображаться, чем твои сложные и красивые объекты:)


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

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