Заставка

Программирование на старых и современных языках, а так-же дизайн

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Перемещаем автомобиль в SwishMax 3

Сообщений 1 страница 6 из 6

1

Здесь мы научимся программировать алгоритм управления автомобилем, и так погнали! Где-то нашёл в интернете картинку автомобиля, и использовал метод ротоскопии, получилась вот такая машинка:
https://i.ibb.co/SPdgwPD/swishmax3-car-rotoscoping-11-12-05-07-2021-min.jpg

Колёса я сделал спомощь окружности, а кузов автомобиля я рисовал вот этим инструментом:
https://i.ibb.co/pns5LTC/swismax3-car-draw-11-08-05-07-2021-min.jpg

Сначало 1 сгруппируем наш автомобиль (группа состоит из машины - car, и 2 колеса - wheel_front, и wheel_back), 2 - скажем что объект (группа) будет называться carr
https://i.ibb.co/LYXxz6Z/swismax3-car-10-59-05-07-2021-min.jpg

Я без понятия как в SwishScript-е сделать таймер, буду использовать вместо таймера событие onFrame(3), это означает что каждый 3й кадр, будет прерываться.
Главное чтобы галочка не стояла что в конце фильма остановиться:
https://i.ibb.co/3sZn9P2/swishmax3-filmproperty-11-23-05-07-2021-min.jpg

Вот сам код, наш автомобиль едет как надо:

Код:
onSelfEvent (load) {
   // Инициализация
   var kp : Number = 0;  // Куда перемещаться машина
   var x : Number = 0;    // позициа машины
   var step : Number = 0; // шаг

   kp=0; // Машина никуда не перемещается
   step = 1; // Шаг = 1
   x = carr._x; // Получаем позицию машины
}

onSelfEvent (press,keyPress("<Space>")) {
    kp = 0; // Если нажали на пробел, то останавливаем машину
}

onSelfEvent (press,keyPress("<Left>")) {
   kp = 1; // Если нажали на кнопку влево, то говорим что машина будет перемещаться назад
}
onSelfEvent (press,keyPress("<Right>")) {
   kp = 2; // Если нажали на кнопку вправо, то говорим что машина будет перемещаться вперёд
}

onFrame (3) {
   // Если попадаем на 3 кадр
    if(kp == 1) {
      // Если кнопку нажали влево, то перемещаем автомобиль влево
       x -= step;
       carr._x = x;        
    }
    else if(kp == 2) {
      // Если кнопку нажали вправо, то перемещаем автомобиль вправо
       x += step;
       carr._x = x;
    }
}

0

2

Оптимизируем наш код:

Код:
onSelfEvent (load) {
   var kp : Number = 0;    // Куда перемещаться машина
   var x : Number = 0;      // позициа машины
   var step : Number = 0; // шаг
   kp=0; // Машина никуда не перемещается
   step = 5; // Шаг = 5
   x = carr._x; // Получаем позицию машины
}

onSelfEvent (keyPress("<Space>")) {
   kp=0;   // Если нажали на пробел, то останавливаем машину
}

onSelfEvent (press,keyPress("<Left>")) {
   kp = step * -1;   // Если нажали на кнопку влево, то говорим что машина будет перемещаться назад
}
onSelfEvent (press,keyPress("<Right>")) {
   kp = step;         // Если нажали на кнопку вправо, то говорим что машина будет перемещаться вперёд
}

onFrame (3) {
  // Перемещаем машину
  x = x + kp; 
  carr._x = x;
}

0

3

Теперь усовершенстуем алгоритм нашей игры, сначало автомобиль доедет до середины, а потом будут отображаться монетки:
1. Так должна выглядеть игра:
https://i.ibb.co/JdFDhTM/swishmax3-game1-13-03-11-07-2021-min.jpg

https://i.ibb.co/gj0C65x/swishmax3-game2-13-04-11-07-2021-min.jpg

2. Может возникнуть такая проблема, что за пределами флэш будет видны монеты см.:
https://i.ibb.co/MgFXcjq/swishmax3-game4-problem-13-11-11-07-2021-min.jpg

3. Чтобы их скрыть, нужно в настройках нажать на галочки (то что красным выделено) см.:
https://i.ibb.co/1T9PLHL/swishmax3-game3-13-09-11-07-2021-min.jpg

Вот код:

Код:
// Инициализация
onSelfEvent (load) {
    const MAX : Number = 1000;  // Максимальное значение для рандомного числа
    const MIN : Number = 500;     // Минимальное значение для рандомного числа
    const STEP : Number = 5;       // Шаг
    var money:Number = 0;          // Количество собраных монет
    var x:Number = 0;                  //
    var direct:Number = 0;            // Направление автомобиля
    var x1:Number = Math.randomRange(MIN, MAX);  // Рандомное число в диапазоне MIN < x < MAX
    var x2:Number = Math.randomRange(MIN, MAX);  // Рандомное число в диапазоне MIN < x < MAX
    var x3:Number = Math.randomRange(MIN, MAX);  // Рандомное число в диапазоне MIN < x < MAX
    
    var car:Boolean = true;  // Должна ли ехать машина
    
    coin1._visible = false; // Прячим монету
    coin2._visible = false; // Прячим монету
    coin3._visible = false; // Прячим монету
    
    coin1._x = x1;
    coin2._x = x2;
    coin3._x = x3;
    
    score.text = "$ 0"; // Отображаем $ 0
}

// Если нажали на пробле, запускаем машину
onSelfEvent (keyPress("<Space>")) {
    direct = STEP * -1;
}

// Проверка позиции объекта (coin1, coin2, coin3)
function check_pos(coin, pos) {
    if(coin._x < pos)
        return true;
    else 
        return false;
}

// Перемещаем монету
function set_pos(coin) {
    var i:Number = Math.randomRange(MIN, MAX);
    coin._x = 0;
    coin._x = i;
    money+=5;
}

// Цикл...
onFrame(3) {  
    this.score.text = "$ " + money;  

    if(car == true && direct != 0) {
        carr._x+=STEP;
        if(carr._x >= 210) {
           car = false;
           coin1._visible = true;
           coin2._visible = true;
           coin3._visible = true;
        }
    }
    else if(car == false && direct != 0) {
        if(check_pos(coin1, carr._x)) {
          set_pos(coin1);
        }    
        if(check_pos(coin2, carr._x)) {
          set_pos(coin2);
        }
        if(check_pos(coin3, carr._x)) {
          set_pos(coin3);        
        }
        
        coin1._x += direct; 
        coin2._x += direct; 
        coin3._x += direct; 
    }
}

0

4

Улучшим наш код...
1. Я создал отдельный проект coin (монеты), они плавно взлетают, и опускаются:
https://i.ibb.co/55yj8Lr/swishmax3-coin-20-07-11-07-2021-min.jpg

Код:

Код:
onSelfEvent (load) {
  const MIN:Number = 5;
  const MAX:Number = 15;
  var direct:Number = 1;
  coin._y = Math.randomRange(MIN, MAX);
}

onFrame (3) {
   coin._y += 1 * direct;
   if(coin._y >= 50) 
     direct = -1;
   if(coin._y <= 30)
     direct = 1;
}

2. Подправил код:
https://i.ibb.co/qdvjzJb/swishmax3-game-20-10-11-07-2021-min.jpg

Код:
onSelfEvent (load) {
    const MAX : Number = 1000;
    const MIN : Number = 500;
    const STEP : Number = 5;
    var money:Number = 0;
    var x:Number = 0;
    var direct:Number = 0;
    var x1:Number = Math.randomRange(MIN, MAX);
    var x2:Number = Math.randomRange(MIN, MAX);
    var x3:Number = Math.randomRange(MIN, MAX);
    
    var car:Boolean = true;
    var position:Number = 0;
    
    coin1.loadMovie("coin.swf");
    coin2.loadMovie("coin.swf");
    coin3.loadMovie("coin.swf");
    
    coin1._visible = false;
    coin2._visible = false;
    coin3._visible = false;
    
    coin1._x = x1;
    coin2._x = x2;
    coin3._x = x3;
    
    score.text = "";
}

onSelfEvent (keyPress("<Space>")) {
    direct = STEP * -1;
}

function check_pos(coin, pos) {
    if(coin._x < pos)
        return true;
    else 
        return false;
}
function set_pos(coin) {
    var i:Number = Math.randomRange(MIN, MAX);
    coin._x = 0;
    coin._x = i;
    money+=5;
}

onFrame(3) {  
    this.score.text = "$ " + money + " Distance KM:" + position;  
    if(car == true && direct != 0) {
        carr._x+=STEP;
        if(carr._x >= 210) {
           car = false;
           coin1._visible = true;
           coin2._visible = true;
           coin3._visible = true;
        }
    }
    else if(car == false && direct != 0) {
        if(check_pos(coin1, carr._x)) {
          set_pos(coin1);
        }    
        if(check_pos(coin2, carr._x)) {
          set_pos(coin2);
        }
        if(check_pos(coin3, carr._x)) {
          set_pos(coin3);        
        }
        
        coin1._x += direct; 
        coin2._x += direct; 
        coin3._x += direct; 
        position += 0.05;
    }
}

0

5

Окончательный результат, я деньги переместил вниз, за машину:
Скрин игры:
https://i.ibb.co/zmbC2yX/swima-gm-01-08-35-05-08-2021-min.jpg

Код игры FilmGame5.swi:

Код:
onSelfEvent (load) {
    const MAX : Number = 1000;
    const MIN : Number = 500;
    const STEP : Number = 5;
    var money:Number = 0;
    var x:Number = 0;
    var direct:Number = 0;
    var x1:Number = Math.randomRange(MIN, MAX);
    var x2:Number = Math.randomRange(MIN, MAX);
    var x3:Number = Math.randomRange(MIN, MAX);
    
    var car:Boolean = true;
    var position:Number = 0;
    
    coin1.loadMovie("coin.swf");
    coin2.loadMovie("coin.swf");
    coin3.loadMovie("coin.swf");
    
    coin1._visible = false;
    coin2._visible = false;
    coin3._visible = false;
    
    coin1._x = x1;
    coin2._x = x2;
    coin3._x = x3;
    
    score.text = "";
}

onSelfEvent (keyPress("<Space>")) {
    direct = STEP * -1;
}

function check_pos(coin, pos) {
    if(coin._x < pos)
        return true;
    else 
        return false;
}
function set_pos(coin) {
    var i:Number = Math.randomRange(MIN, MAX);
    coin._x = 0;
    coin._x = i;
    money+=5;
}

onFrame(3) {  
    this.score.text = "$ " + money + " Distance KM:" + position;  
    if(car == true && direct != 0) {
        carr._x+=STEP;
        if(carr._x >= 210) {
           car = false;
           coin1._visible = true;
           coin2._visible = true;
           coin3._visible = true;
        }
    }
    else if(car == false && direct != 0) {
        if(check_pos(coin1, carr._x+120)) {
          set_pos(coin1);
        }    
        if(check_pos(coin2, carr._x+120)) {
          set_pos(coin2);
        }
        if(check_pos(coin3, carr._x+120)) {
          set_pos(coin3);        
        }
        
        coin1._x += direct; 
        coin2._x += direct; 
        coin3._x += direct; 
        position += 0.05;
    }
}

Скрин:
https://i.ibb.co/nPK0TXJ/swima-gm-03-08-04-05-08-2021-min.jpg

Код coin.swi:

Код:
onSelfEvent (load) {
  const MIN:Number = 5;
  const MAX:Number = 15;
  var direct:Number = 1;
  coin._y = Math.randomRange(MIN, MAX);
}

onFrame (3) {
   coin._y += 1 * direct;
   if(coin._y >= 30) 
     direct = -1;
   if(coin._y <= 10)
     direct = 1;
}

Окончательный результат игры:
https://i.ibb.co/hyZ78cz/swima-gm-02-08-36-05-08-2021-min.jpg

0

6

Результат работы можете посмотреть тут:
https://cloud.mail.ru/public/WVnh/YcY9oh9Wx

0