Комментарии к дневнику

  1. Аватар для Inca
    Да, значения ускорения, торможения, силы прыжка и т.д. На скирре такая же фига - всё дело в настройках коэффициентов.
  2. Аватар для Andrew
    Забыл добавить: версия онлайн значительно тормазнутее обычной версии. Или это только у меня.
  3. Аватар для Andrew
    Баг исправлен, ссылки обновлены.
    Подтверджаю - сейчас физика стала гораздо лучше. Осталось подтянуть коэффициенты и вперёд!
    О каких коэфицентах идёт речь? Ты имеешь в виду скорость падения, скорость движения и т.д.?
  4. Аватар для Inca
    Подтверджаю - сейчас физика стала гораздо лучше. Осталось подтянуть коэффициенты и вперёд!
  5. Аватар для Andrew
    да, да, я тоже это увидел. это происходит в момент смены jumpSpeed с + на -( в момент оканчания взлёта и начала падения)
  6. Аватар для Рыб
    баг: Во время прыжка(на взлете), есть возможность впечатываться в стену
  7. Аватар для Andrew
    решил проблему вот таким кодом. возможно всё было иза минуса, потому в хаде выводился минус и всё, никаких цифр, если я шёл в лево
    PHP код:
    if(((movingSpeed>0)and(movingSpeed<0.01))or((movingSpeed<0)and(movingSpeed>-0.01))){
            
    movingSpeed 0;
        } 
  8. Аватар для Рыб
    Сделай так чтобы в хад выводилась значение movingSpeed и посмотри с какие значения у нее при повернутом влево и вправо персонаже. Думаю связано с минусом в выражении.
  9. Аватар для Andrew
    исправил много глюков(кроме скольжения)
    http://redcode.do.am/FlaP_optim.swf
    код стал немного быстрее и крассивее
    PHP код:
    //can change
    var maxJumpSpeed 5;
    var 
    maxMovingSpeed 2;

    //not change
    var jumpSpeed 0;
    var 
    isMoving false;
    var 
    dir "right";
    var 
    airdir "graund";
    var 
    onGraund1 false;
    var 
    movingSpeed 0;
    var 
    liftSize 144;
    var 
    platformsArr = [];
    var 
    platformsCount 0;
    var 
    liftsArr = [];
    var 
    liftsCount 0;
    var 
    liftsStatus 0;
    var 
    liftsStatus1 0;

    function 
    spritesUpdate() {
        if (
    airdir == "graund") {
            if (
    isMoving == false) {
                if (
    dir == "right") {
                    
    hero.gotoAndStop(1);
                } else {
                    
    hero.gotoAndStop(2);
                }
            } else {
                if (
    dir == "right") {
                    
    hero.gotoAndStop(3);
                } else {
                    
    hero.gotoAndStop(4);
                }
            }
        }
        if (
    airdir == "jumping") {
            if (
    dir == "right") {
                
    hero.gotoAndStop(5);
            } else {
                
    hero.gotoAndStop(6);
            }
        }
        if (
    airdir == "falling") {
            if (
    dir == "right") {
                
    hero.gotoAndStop(7);
            } else {
                
    hero.gotoAndStop(8);
            }
        }
    }
    function 
    inputUpdate() {
        
    isMoving false;
        if (
    Key.isDown(Key.ESCAPE)) {
            
    _parent.gotoAndStop(2);
        }
        if (
    Key.isDown(Key.LEFT)) {
            if (
    onGraund1) {
                
    isMoving true;
            }
            
    dir "left";
            
    movingSpeed = -maxMovingSpeed;
        }
        if (
    Key.isDown(Key.RIGHT)) {
            if (
    onGraund1) {
                
    isMoving true;
            }
            
    dir "right";
            
    movingSpeed maxMovingSpeed;
        }
        if ((
    Key.isDown(Key.UP)) and (onGraund1 == true)) {
            
    airdir "jumping";
            
    jumpSpeed maxJumpSpeed;
        }
    }
    function 
    physicUpdate() {
        if (
    liftsStatus1 == liftSize) {
            
    liftsStatus 2;
        }
        if (
    liftsStatus1 == 0) {
            
    liftsStatus 1;
        }
        if (
    liftsStatus == 1) {
            
    liftsStatus1 += 1;
            for (
    i=1i<=liftsCounti++) {
                
    liftsArr[i]._y -= 1;
            }
        } else {
            
    liftsStatus1 -= 1;
            for (
    i=1i<=liftsCounti++) {
                
    liftsArr[i]._y += 1;
            }
        }
        
    onGraund1 false;
        for (
    i=1i<=platformsCounti++) {
            if (
    hero.mu.hitTest(platformsArr[i])) {
                
    jumpSpeed = -1;
            }
            if (
    hero.md.hitTest(platformsArr[i])) {
                
    onGraund1 true;
            }
            if (
    hero.mr.hitTest(platformsArr[i])) {
                if(
    movingSpeed>0){
                    
    movingSpeed 0;
                }
            }
            if (
    hero.ml.hitTest(platformsArr[i])) {
                if(
    movingSpeed<0){
                    
    movingSpeed 0;
                }
            }
        }
        for (
    i=1i<=liftsCounti++) {
            if (
    hero.mu.hitTest(liftsArr[i])) {
                
    jumpSpeed = -1;
            }
            if (
    hero.md.hitTest(liftsArr[i])) {
                
    onGraund1 true;
                if (
    liftsStatus == 2) {
                    
    hero._y += 1;
                } else {
                    
    hero._y -= 1;
                }
            }
            if (
    hero.mr.hitTest(liftsArr[i])) {
                if(
    movingSpeed>0){
                    
    movingSpeed 0;
                }
            }
            if (
    hero.ml.hitTest(liftsArr[i])) {
                if(
    movingSpeed<0){
                    
    movingSpeed 0;
                }
            }
        }
        if (
    onGraund1 == true) {
            
    airdir "graund";
        } else {
            if (
    jumpSpeed>0) {
                
    airdir "jumping";
            } else {
                
    airdir "falling";
            }
        }
        
    hero._x += movingSpeed;
        
    jumpSpeed -= 0.1;
        if (
    airdir == "graund") {
            if (
    jumpSpeed<0) {
                
    jumpSpeed 0;
            }
        }
        if(
    jumpSpeed<-3){
            
    jumpSpeed=-3;
        }
        
    hero._y -= jumpSpeed;
        
    movingSpeed *= 0.94;
    }
    function 
    cameraUpdate(){
        
    _x = -(hero._x-320);
        
    _y = -(hero._y-240);
        if (
    _x>0) {
            
    _x 0;
        }
        if (
    _y>0) {
            
    _y 0;
        }
        if (
    _x<640-_width) {
            
    _x 640-_width;
        }
        if (
    _y<480-_height) {
            
    _y 480-_height;
        }
        
    bk._x = -_x;
        
    bk._y = -_y;
    }
    onEnterFrame = function () {
        
    inputUpdate();
        
    physicUpdate();
        
    spritesUpdate();
        
    cameraUpdate();
    }; 
  10. Аватар для Andrew
    так что мне делать со скольжением?
  11. Аватар для Рыб
    + баг: если стоять(без движения) под низким потолком и прыгнуть, то прыгнуть толком не получиться.
  12. Аватар для Andrew
    А вообще с новой физикой появились и новые глюки. Нужно заняться оптимизацей.
  13. Аватар для Andrew
    Я сделал очень прадоподобный прыжок, очень.
    http://redcode.do.am/flap-kopija.swf (лучше скачай(файл,сохранить как)
    Но появилась очень большая проблема, которую я раньше не замечал. А именно, если пойти влево, то скольжение будет длиться очень долго. Такой же баг я видел в суперКароши, и она тоже на флэш.
  14. Аватар для Рыб
    Синусы и косинусы, эта уже немного другая физика. С векторами.
  15. Аватар для Рыб
    Ну в школьной физике формула падения тела будет:
    x = x0 + v0 + (g*t^2)/2
    либо(дайбогпамяти)
    v = v0 + g*t
    А если перенести на твои переменные (буквой t можно пренебречь, т.к. мы берем его через равные промежутки времени)
    jumpSpeed = jumpSpeed + G // ускарение свободного падения, его надо подобрать
  16. Аватар для Andrew
    у меня была идея найти процент jumpForce от maxJumpForce и умножить на speed, но получалось слишком ровно и не правдоподобно. А вообще можно как то сделать через синусы.
  17. Аватар для Рыб
    А если попробовать не умножать на какой-то коэфициент, а отнимать\дабовлять его к скорости.
    зы: поробуй 0.988 и 1.02(или 0.989 и 1.01)
  18. Аватар для Andrew
    Вот только я не могу подобрать нужные 0.988 и 1.01 что бы было плавно
  19. Аватар для Andrew
    вот, это я и написал, только немного подругому
    PHP код:
    if ((Key.isDown(Key.UP)) and (onGraund1 == true)) {
            
    airdir "jumping";
            
    jumpForce maxJumpForce;
            
    jumpSpeed maxJumpSpeed;
        }
    //------------------------------------------
    if (jumpForce>0) {
            
    airdir "jumping";
            
    hero._y -= (1/(gravitation/80)*jumpSpeed);
            
    jumpForce -= jumpSpeed;
            
    jumpSpeed *= 0.988;
            if(
    jumpForce<=0){
                
    fallSpeed jumpSpeed;
            }
        }
    if ((
    jumpForce == 0) and (onGraund1 == false)) {
            
    hero._y += (gravitation/80)*fallSpeed;
            
    fallSpeed *= 1.01;
        } 
  20. Аватар для Рыб
    а так?
    PHP код:
    if (jumpForce>0) {
            
    airdir "jumping";
            
    hero._y -= (1/(gravitation/80)*jumpSpeed);
                    
    jumpSpeed jumpSpeed airResistance;
            
    jumpForce -= jumpSpeed;
        }