2 октября 2016 г

Отправлено 6 окт. 2016 г., 10:42 пользователем Dimitrijs Fedotovs   [ обновлено 16 окт. 2016 г., 13:48 ]

Пройденый материал

  • События спрайтов
  • Манипулации с событиями и спрайтами
  • Смена фонов игры

Разобрались с событиями, которые могут происходить у спрайта

  • Инициализация - onInit
  • На каждый кадр (фрейм) - onLoop
  • При столкновении (коллизии) с другими спрайтами - onCollision

Примеры, которые использовали на занятии:

Огненный мяч, который улетает (за экран) в заданном направлении

       // зарегистрировать символ 'o' для создания шарика (BallSprite)
register('o', BallSprite::new)                   
           // при инициализации "включить" огненный хвост
    .onInit(b -> b.setFlame(true))
           // при инициализации повернуть шар "лицом" на юго-восток
    .onInit(b -> b.setRotation(Direction.SE))    
           // при инициализации указать направление движения на запад
    .onInit(b -> b.setDirection(Direction.W))    
           // при инициализации указать скорость движения 10 клеток в секунду
    .onInit(b -> b.setSpeed(10))                 
           // на каждый кадр сдвигать шарик в указанном направлении с указанной скоростью
    .onLoop(ai::followDirection);

Мяч, который отскакивает от других спрайтов

    // зарегистрировать символ 'o' для создания шарика (BallSprite)
register('o', BallSprite::new)                   
           // при инициализации указать направление движения на северо-восток
    .onInit(b -> b.setDirection(Direction.NE))   
           // при инициализации указать скорость движения 10 клеток в секунду
    .onInit(b -> b.setSpeed(10))                 
           // на каждый кадр сдвигать шарик в указанном направлении с указанной скоростью
    .onLoop(ai::followDirection)                 
           // на каждый кадр поворачивать шарик "лицом" по направлению движения
    .onLoop(ai::turnToDirection)                 
           // при столкновении с другим (любым) спрайтом - совершить отскок
    .onCollision(ai::bounce);

Блок, который исчезает, если в него врезается другой (любой) спрайт

    // зарегистрировать символ 'x' для создания блока (BlockSprite)
register('x', BlockSprite::new)                  
         // если что-то врезалось в блок - блок перестает существовать (halt)
    .onCollision(ai::halt);

Мяч отскакивает от других спрайтов и исчезает, если врезается в спрайт огня

Код аналогичный предыдущему примеру, только с дополнительной строчкой в конце, указывающей, что надо шарику исчезнуть, если врезался в огонь:

           // при столкновении со спрайтом огня - удалить шарик из игры
    .onCollision(ai::halt, TrapSprite.class);

Мяч, следующий за курсором мышки

    // зарегистрировать символ 'o' для создания шарика (BallSprite)
register('o', BallSprite::new)                   
        // при инициализации указать скорость движения 10 клеток в секунду
    .onInit(b -> b.setSpeed(10))                 
        // на каждый кадр сдвигать шарик по координатам X и Y
        // в направлении курсора мышки, с указанной скоростью

    .onLoop(ai::followMouseXY)                   
        // на каждый кадр поворачивать шарик "лицом" по направлению к курсору мышки
    .onLoop(ai::turnToMouse)                     
        // при столкновении с другим (любым) спрайтом - остановиться
    .onCollision(ai::stopXY);

Direction

Направления, которые можно использовать

I, Andrew pmk [GFDL (http://www.gnu.org/copyleft/fdl.html) or CC-BY-SA-3.0 (http://creativecommons.org/licenses/by-sa/3.0/)], via Wikimedia Commons

Смена фона

На данный момент существуют три различных фона, которые можно поменять при помощи команды setBackground:

  • Пустыня - setBackground(new DesertBackground());
  • Горы и вулкан - setBackground(new VolcanoBackground());
  • Инопланетная тема - setBackground(new SpaceBackground());

Дополнительные примеры

Вид ловушки (огонь, лава, вода)

register('w', TrapSprite::new)
    .onInit(t -> t.setMaterial(TrapMaterial.FIRE));

Так же можно использовать другие материалы ловушки:

  • ACID
  • LAVA
  • WATER
  • PLASMA
  • FIRE

Цвет шарика

register('o', BallSprite::new)
     .onInit(b -> b.setColor(BallColor.YELLOW));

Возможны следующие цвета:

  • BLUE
  • YELLOW
  • VIOLET
  • GREEN

Материал блока

register('=', BlockSprite::new)
     .onInit(b -> b.setMaterial(BlockMaterial.METAL));

Возможны следующие варианты:

  • AMBER
  • CANDY
  • METAL
  • BUBBLESTONE
  • GREENSTONE
  • CITRINE
  • BRICK
  • SAND
  • CONCRETE

Цвет стены

register('#', WallSprite::new)
     .onInit(b -> b.setColor(WallColor.BLUE));

Возможны следующие цвета:

  • ORANGE
  • GREEN
  • BLUE
  • GRAY
  • BLACK

Домашнее задание

Для родителей

Для детей

  • Повторить все что делали на занятии, но по мере возможности самостоятельно
Comments