Вот что у меня вышло со скролингом. http://redcode.do.am/FlaP01.swf
не, не сработает. вопервых jumpForce = jumpForce * airResistance; сработает только тогда, когда нажата клавиша Вверх. Во вторых jumpForce это не сила прыжка, вопрёки названию, а сколько пиклелей осталось подниматься. Вот часть из физикАпдэйт PHP код: if (jumpForce>0) { airdir = "jumping"; hero._y -= (1/(gravitation/80)*jumpSpeed); jumpForce -= jumpSpeed; }
if (jumpForce>0) { airdir = "jumping"; hero._y -= (1/(gravitation/80)*jumpSpeed); jumpForce -= jumpSpeed; }
PHP код: 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 = (1) * maxMovingSpeed; // вправо, хотя вроде наоборот } if (Key.isDown(Key.UP)) { if (onGraund1 == true)){ // если мы стоит на земле, то толчок airdir = "jumping"; jumpForce = maxJumpForce; } jumpForce = jumpForce * airResistance; // неспеша уменшаем силу прыжка за счет ситы трения } hero._x += movingSpeed; movingSpeed = movingSpeed * 0.96; // тормазим } Добавь var airResistance = 0.96 // трение воздуха(кооэфицент тормажения) правдп что будет с падением я даже прикинуть не могу.
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 = (1) * maxMovingSpeed; // вправо, хотя вроде наоборот } if (Key.isDown(Key.UP)) { if (onGraund1 == true)){ // если мы стоит на земле, то толчок airdir = "jumping"; jumpForce = maxJumpForce; } jumpForce = jumpForce * airResistance; // неспеша уменшаем силу прыжка за счет ситы трения } hero._x += movingSpeed; movingSpeed = movingSpeed * 0.96; // тормазим }
пишу скрипт в хад для того чтобы узнать фпс. Потом попробую перенести двиг на ас3(это был ас2) и посмотреть, увеличится ли фпс.
Всё исправил. Выглядит классно. Можешь попробовать прикрутить это к прыжку(я тоже буду пробовать)? PHP код: //can changevar gravitation = 80;var maxJumpForce = 96;var jumpSpeed = 2;var fallSpeed = 2;var maxMovingSpeed = 2;//not changevar isMoving = false;var dir = "right";var airdir = "graund";var jumpForce = 0;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 = (1) * maxMovingSpeed; // вправо, хотя вроде наоборот } if ((Key.isDown(Key.UP)) and (onGraund1 == true)) { airdir = "jumping"; jumpForce = maxJumpForce; } hero._x += movingSpeed; movingSpeed = movingSpeed * 0.96; // тормазим }function physicUpdate() { if(liftsStatus1==liftSize){ liftsStatus = 2; } if(liftsStatus1==0){ liftsStatus = 1; } if(liftsStatus==1){ liftsStatus1+=1; for(i=1;i<=liftsCount;i++){ liftsArr[i]._y-=1; } } else { liftsStatus1-=1; for(i=1;i<=liftsCount;i++){ liftsArr[i]._y+=1; } } onGraund1 = false; for(i=1;i<=platformsCount;i++){ if(hero.mu.hitTest(platformsArr[i])){ jumpForce = 0; } if(hero.md.hitTest(platformsArr[i])){ onGraund1 = true; } if(hero.mr.hitTest(platformsArr[i])){ hero._x-=maxMovingSpeed; movingSpeed = 0; } if(hero.ml.hitTest(platformsArr[i])){ hero._x+=maxMovingSpeed; movingSpeed = 0; } } for(i=1;i<=liftsCount;i++){ if(hero.mu.hitTest(liftsArr[i])){ jumpForce = 0; } if(hero.md.hitTest(liftsArr[i])){ onGraund1 = true; if(liftsStatus==2){ hero._y+=1; } else { hero._y-=1; } } if(hero.mr.hitTest(liftsArr[i])){ hero._x-=maxMovingSpeed; movingSpeed = 0; } if(hero.ml.hitTest(liftsArr[i])){ hero._x+=maxMovingSpeed; movingSpeed = 0; } } if ((jumpForce == 0) and (onGraund1 == false)) { hero._y += (gravitation/80)*fallSpeed; } if (onGraund1 == true) { airdir = "graund"; } else { if (jumpForce>0) { airdir = "jumping"; } else { airdir = "falling"; } } if (hero._x<0) { hero._x = 0; } if (hero._x>640-hero._width) { hero._x = 640-hero._width; } if (jumpForce<0) { jumpForce = 0; } if (jumpForce>0) { airdir = "jumping"; hero._y -= 1/(gravitation/80)*jumpSpeed; jumpForce -= jumpSpeed; }}function drawHUD() { grav.text = "Gravitation: "+gravitation; stat.text = "Status: "+dir+" & "+airdir; sp.text = "Jump Speed: "+jumpSpeed; jf.text = "Jump Force: "+maxJumpForce; spg.text = "Moving Speed: "+maxMovingSpeed;}onEnterFrame = function () { inputUpdate(); physicUpdate(); spritesUpdate(); drawHUD();};
//can changevar gravitation = 80;var maxJumpForce = 96;var jumpSpeed = 2;var fallSpeed = 2;var maxMovingSpeed = 2;//not changevar isMoving = false;var dir = "right";var airdir = "graund";var jumpForce = 0;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 = (1) * maxMovingSpeed; // вправо, хотя вроде наоборот } if ((Key.isDown(Key.UP)) and (onGraund1 == true)) { airdir = "jumping"; jumpForce = maxJumpForce; } hero._x += movingSpeed; movingSpeed = movingSpeed * 0.96; // тормазим }function physicUpdate() { if(liftsStatus1==liftSize){ liftsStatus = 2; } if(liftsStatus1==0){ liftsStatus = 1; } if(liftsStatus==1){ liftsStatus1+=1; for(i=1;i<=liftsCount;i++){ liftsArr[i]._y-=1; } } else { liftsStatus1-=1; for(i=1;i<=liftsCount;i++){ liftsArr[i]._y+=1; } } onGraund1 = false; for(i=1;i<=platformsCount;i++){ if(hero.mu.hitTest(platformsArr[i])){ jumpForce = 0; } if(hero.md.hitTest(platformsArr[i])){ onGraund1 = true; } if(hero.mr.hitTest(platformsArr[i])){ hero._x-=maxMovingSpeed; movingSpeed = 0; } if(hero.ml.hitTest(platformsArr[i])){ hero._x+=maxMovingSpeed; movingSpeed = 0; } } for(i=1;i<=liftsCount;i++){ if(hero.mu.hitTest(liftsArr[i])){ jumpForce = 0; } if(hero.md.hitTest(liftsArr[i])){ onGraund1 = true; if(liftsStatus==2){ hero._y+=1; } else { hero._y-=1; } } if(hero.mr.hitTest(liftsArr[i])){ hero._x-=maxMovingSpeed; movingSpeed = 0; } if(hero.ml.hitTest(liftsArr[i])){ hero._x+=maxMovingSpeed; movingSpeed = 0; } } if ((jumpForce == 0) and (onGraund1 == false)) { hero._y += (gravitation/80)*fallSpeed; } if (onGraund1 == true) { airdir = "graund"; } else { if (jumpForce>0) { airdir = "jumping"; } else { airdir = "falling"; } } if (hero._x<0) { hero._x = 0; } if (hero._x>640-hero._width) { hero._x = 640-hero._width; } if (jumpForce<0) { jumpForce = 0; } if (jumpForce>0) { airdir = "jumping"; hero._y -= 1/(gravitation/80)*jumpSpeed; jumpForce -= jumpSpeed; }}function drawHUD() { grav.text = "Gravitation: "+gravitation; stat.text = "Status: "+dir+" & "+airdir; sp.text = "Jump Speed: "+jumpSpeed; jf.text = "Jump Force: "+maxJumpForce; spg.text = "Moving Speed: "+maxMovingSpeed;}onEnterFrame = function () { inputUpdate(); physicUpdate(); spritesUpdate(); drawHUD();};
Проблема, это "скольжение"? Если да, то регулируется изменением кооэфицента(можешь добавить его на HUD) 0.98 хотя нет, абракадабра тврится когда перс смотрит влево
http://redcode.do.am/FlaP1.swf
http://redcode.do.am/flap-kopija.swf
да, там наоборот. где (-1) должно быть 1. А там где ничего должно быть -1; плюс ты не написал hero._x += movingSpeed; но появилась проблема. http://redcode.do.am/FlaPb.swf
Код: 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 = (-1) * maxMovingSpeed // вправо, хотя вроде наоборот } if ((Key.isDown(Key.UP)) and (onGraund1 == true)) { airdir = "jumping"; jumpForce = maxJumpForce; } movingSpeed = movingSpeed * 0.98 // тормазим hero._x += movingSpeed // Вот эту строку забыли } Как-то так.
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 = (-1) * maxMovingSpeed // вправо, хотя вроде наоборот } if ((Key.isDown(Key.UP)) and (onGraund1 == true)) { airdir = "jumping"; jumpForce = maxJumpForce; } movingSpeed = movingSpeed * 0.98 // тормазим hero._x += movingSpeed // Вот эту строку забыли }
А перемещение героя у тебя в physicUpdate или в inputUpdate)
не двигается он теперь. Ищу причину.
Ввел еще одну меременную maxMovingSpeed, которая есть значение скорости из HUD. physicUpdate довольно тяжело читается, скажу честно я там потерялся)
Код: 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 = (-1) * maxMovingSpeed // вправо, хотя вроде наоборот } if ((Key.isDown(Key.UP)) and (onGraund1 == true)) { airdir = "jumping"; jumpForce = maxJumpForce; } movingSpeed = movingSpeed * 0.98 // тормазим } Как-то так.
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 = (-1) * maxMovingSpeed // вправо, хотя вроде наоборот } if ((Key.isDown(Key.UP)) and (onGraund1 == true)) { airdir = "jumping"; jumpForce = maxJumpForce; } movingSpeed = movingSpeed * 0.98 // тормазим }
Наверно нужно физику периписать. По крайней мере if (hero._x<0) { hero._x = 0; } if (hero._x>640-hero._width) { hero._x = 640-hero._width; } нужно убрать.
Про физику, совет: самое простое сделат физику по такому приципу: если клавиша нажата movingspeed="заданому значению", если клавиша не нажата то movingspeed=movingspeed*"коэфицет трения"... по тому самому принципу и с прыжками. Это добавить планости Я пытался сделать похоже но у меня не получалось. Вот моя "физика": Код: function physicUpdate() { if(liftsStatus1==liftSize){ liftsStatus = 2; } if(liftsStatus1==0){ liftsStatus = 1; } if(liftsStatus==1){ liftsStatus1+=1; for(i=1;i<=liftsCount;i++){ liftsArr[i]._y-=1; } } else { liftsStatus1-=1; for(i=1;i<=liftsCount;i++){ liftsArr[i]._y+=1; } } onGraund1 = false; for(i=1;i<=platformsCount;i++){ if(hero.mu.hitTest(platformsArr[i])){ jumpForce = 0; } if(hero.md.hitTest(platformsArr[i])){ onGraund1 = true; } if(hero.mr.hitTest(platformsArr[i])){ hero._x-=movingSpeed+onGraund1/2; } if(hero.ml.hitTest(platformsArr[i])){ hero._x+=movingSpeed+onGraund1/2; } } for(i=1;i<=liftsCount;i++){ if(hero.mu.hitTest(liftsArr[i])){ jumpForce = 0; } if(hero.md.hitTest(liftsArr[i])){ onGraund1 = true; if(liftsStatus==2){ hero._y+=1; } else { hero._y-=1; } } if(hero.mr.hitTest(liftsArr[i])){ hero._x-=movingSpeed+onGraund1/2; } if(hero.ml.hitTest(liftsArr[i])){ hero._x+=movingSpeed+onGraund1/2; } } if ((jumpForce == 0) and (onGraund1 == false)) { hero._y += (gravitation/80)*fallSpeed; } if (onGraund1 == true) { airdir = "graund"; } else { if (jumpForce>0) { airdir = "jumping"; } else { airdir = "falling"; } } if (hero._x<0) { hero._x = 0; } if (hero._x>640-hero._width) { hero._x = 640-hero._width; } if (jumpForce<0) { jumpForce = 0; } if (jumpForce>0) { airdir = "jumping"; hero._y -= 1/(gravitation/80)*jumpSpeed; jumpForce -= jumpSpeed; } } А вот про клавиши: Код: function inputUpdate(){ isMoving = false; if (Key.isDown(Key.ESCAPE)) { _parent.gotoAndStop(2); } if (Key.isDown(Key.LEFT)) { if (onGraund1) { isMoving = true; } dir = "left"; hero._x -= movingSpeed+onGraund1/2; } if (Key.isDown(Key.RIGHT)) { if (onGraund1) { isMoving = true; } dir = "right"; hero._x += movingSpeed+onGraund1/2; } if ((Key.isDown(Key.UP)) and (onGraund1 == true)) { airdir = "jumping"; jumpForce = maxJumpForce; } }
function physicUpdate() { if(liftsStatus1==liftSize){ liftsStatus = 2; } if(liftsStatus1==0){ liftsStatus = 1; } if(liftsStatus==1){ liftsStatus1+=1; for(i=1;i<=liftsCount;i++){ liftsArr[i]._y-=1; } } else { liftsStatus1-=1; for(i=1;i<=liftsCount;i++){ liftsArr[i]._y+=1; } } onGraund1 = false; for(i=1;i<=platformsCount;i++){ if(hero.mu.hitTest(platformsArr[i])){ jumpForce = 0; } if(hero.md.hitTest(platformsArr[i])){ onGraund1 = true; } if(hero.mr.hitTest(platformsArr[i])){ hero._x-=movingSpeed+onGraund1/2; } if(hero.ml.hitTest(platformsArr[i])){ hero._x+=movingSpeed+onGraund1/2; } } for(i=1;i<=liftsCount;i++){ if(hero.mu.hitTest(liftsArr[i])){ jumpForce = 0; } if(hero.md.hitTest(liftsArr[i])){ onGraund1 = true; if(liftsStatus==2){ hero._y+=1; } else { hero._y-=1; } } if(hero.mr.hitTest(liftsArr[i])){ hero._x-=movingSpeed+onGraund1/2; } if(hero.ml.hitTest(liftsArr[i])){ hero._x+=movingSpeed+onGraund1/2; } } if ((jumpForce == 0) and (onGraund1 == false)) { hero._y += (gravitation/80)*fallSpeed; } if (onGraund1 == true) { airdir = "graund"; } else { if (jumpForce>0) { airdir = "jumping"; } else { airdir = "falling"; } } if (hero._x<0) { hero._x = 0; } if (hero._x>640-hero._width) { hero._x = 640-hero._width; } if (jumpForce<0) { jumpForce = 0; } if (jumpForce>0) { airdir = "jumping"; hero._y -= 1/(gravitation/80)*jumpSpeed; jumpForce -= jumpSpeed; } }
function inputUpdate(){ isMoving = false; if (Key.isDown(Key.ESCAPE)) { _parent.gotoAndStop(2); } if (Key.isDown(Key.LEFT)) { if (onGraund1) { isMoving = true; } dir = "left"; hero._x -= movingSpeed+onGraund1/2; } if (Key.isDown(Key.RIGHT)) { if (onGraund1) { isMoving = true; } dir = "right"; hero._x += movingSpeed+onGraund1/2; } if ((Key.isDown(Key.UP)) and (onGraund1 == true)) { airdir = "jumping"; jumpForce = maxJumpForce; } }
Да, это так. Но ничего поделать не могу. Это есть в почти каждом движке. И я не знаю как это исправить. Думаю на скроллом.
Про физику, совет: самое простое сделат физику по такому приципу: если клавиша нажата movingspeed="заданому значению", если клавиша не нажата то movingspeed=movingspeed*"коэфицет трения"... по тому самому принципу и с прыжками. Это добавить планости
При выставлении скорости большей размеров препятсвия(около 20), появляется возможность "пробивать" их...
а что насчёт телефонов и коммерции