Игра для маленьких "Спокойной ночи Машинки"


#1

Здравствуйте!
Этим обращением выражаю благодарность Ивану за этот ресурс и отдельно за видео курсы! Думаю процентов 90 всего, чему я научился за полтора года, это благодаря SwiftBook.

Иван, Благодарю!

Собственно о приложении:
Это игра для детей младшего возраста, создана на SpriteKit.
Игра про различные автомобили. Игроку предлагается 8 различных локация про разные машинки. В течении игры ребенок:

  • загрузит самосвал песком на стройке управляя экскаватором;
  • побывает в салоне машины и сможет понажимать на элементы управления;
  • заедет на мойку и помоет машину из KARCHER;
  • далее АЗС — заправка машины, покупка сопутствующих товаров и оплата бензина;
  • посещение СТО с заменой колес и других поврежденных деталей;
  • магазин зал.частей (покупка, оплата), потом подземная парковка, зарядка аккумулятора, смена масла в двигателе и пр.
  • парковка в гараж, желательно при этом не врезаться в ворота и стену гаража;

Посмотрев Курс: Фреймворк Для Создания Игр SpriteKit (еще в прошлой версии) и вдохновившись, наблюдая как 3-х летний сын играет в уже существующие игры из App Store, приступил к созданию приложения. Имея опыт создания и публикации нескольких приложений, все же столкнулся с рядом сложно-решаемых задач.
Особенно запомнился процесс придумывания и создания шланга для заправочного пистолета… чтоб он был гибким и подвижным (в итоге сделал его из маленьких сегментов создаваемых друг за другом)

Отмечу что 1,5 года назад я вообще не программировал (думаю что школьные уроки образца 1994г. можно не учитывать). Поэтому никакого базового образования - только практика. В некоторых моментах более опытные коллеги с форума давали ценные советы и подсказки. Если читаете — Вам тоже Благодарю.

Еще об игре - реализованы встроенные покупки. Каждую локацию можно пройти один раз, после чего будет предложено оформить подписку.


#2

Игры для детей - очень здорово!
Но мне кажется что делать с подпиской - очень плохо! ( маленькие дети очень сильно любят проходить одно и тоже, а тут такая подстава
Более лучший вариант - это примерно 1/3 локаций доступно бесплатно, а остальное купить ( не подписка! )

Мое мнение!


#3

Спасибо большое!
Вы молодец, что выпустили свое приложение!


#4

Может это и огорчит некоторых детей и их родителей, я решил сделать так.
А подписка, чтоб снизить цену по сравнению с покупкой — дети растут, предпочтения меняются. Надоело ребенку — отменили. У самого на планшете ребенка изрядно накопилось купленных (потом удаленных) приложений.


#5

Оплачивает же не ребенок, а родитель! Да и разработчик не альтруист, нужно свой труд монетизировать!

Поздравляю с публикацией!


#6

Вопрос к более опытным коллегам.
В приложении есть сцена на заправке где нужно залить топливо, сняв перед этим пистолет с колонки и вставить его в бак.

Собственно вопрос о том как сделать гибкий шланг от пистолета к колонке.
Пистолет жестом перемещается по экрану а шланг должен следовать за ним. В идеале перемещение должно быть ограничено длинной шланга.

Я реализовал это путем создания последовательно нескольких сегментов которые “крепятся” последовательно.

        line.position = CGPoint(x: -petrolStation.size.width / 3.5, y: petrolStation.size.height / 5)
        line.zPosition = 3
        let lineTexture = SKTexture(imageNamed: "line")
        line.physicsBody = SKPhysicsBody(texture: lineTexture, size: lineTexture.size())
        line.physicsBody!.pinned = true
        lineArray = [line, line2, line3, line4, line5, line6, line7, line8, line9, line10, line11, line12, line13, line14, line15, line16, line17, line18, line19, line20,]

        petrolStation.addChild(line)
        
        // создание шланга
        for i in 1..<lineArray.count {
            addLines(nameLine: lineArray[i], nameParent: lineArray[i - 1], rotation: -0.1)
            lineArray[i].physicsBody?.affectedByGravity = false
        }

func addLines (nameLine: SKSpriteNode, nameParent: SKSpriteNode, rotation: CGFloat) {
      nameLine.position = CGPoint(x: 0, y: -nameParent.size.height / 2.1)
      nameLine.zPosition = 3
      nameLine.zRotation = rotation
      let lineTexture = SKTexture(imageNamed: "line")
      nameLine.physicsBody = SKPhysicsBody(texture: lineTexture, size: lineTexture.size())
      nameParent.addChild(nameLine)
      nameLine.physicsBody!.pinned = true
}

Собвенно ворос - может есть способ реализовать это более изящно?
Ссылка на видео с этой сценой