Два дополнительных патрона, ноль штрафных кругов

в 15:44, , рубрики: Беспроводные технологии, биатлон, Блог компании Papa Buba Diop, разработка под iOS, распознавание изображений, метки: ,

Два дополнительных патрона, ноль штрафных кругов
Последнюю неделю я изучал возможности нового Bluetooth 4.0. Зачем? Затем, что отныне Apple устанавливает его на своих смартфонах и планшетах.
Если Вы — обладатель связки iPhone 4S и iPad Mini, то сможете повторить мои эксперименты. Остальным оставляю короткое видео с демонстрацией работы приложения. Честно говоря, приложений я наклепал целых 5 штук.
Смысл всех пяти новых приложений прост, как стиль метро — айФон я использую в качестве периферийного геймпада. Представьте геймпад не только с кнопками, но с видеокамерой и акселерометром!
АйПад соответственно играет роль телевизора, на котором разворачивается игра.

Кроме прочего, я выложил одно приложение в Апп Стор, и аппл сходу его одобрил, к моему несказанному изумлению.
Про итоги недельных продаж тоже расскажу.

Что нужно для разработки

Для написания собственного приложения я скачал пример BTLE Central Peripheral Transfer с родного сайта Apple.

Выкинул прочь яблочный ViewController и заменил его на примерно следующий кусок кода

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    iPad = 0;
    shotView = [[ShootingViewController alloc] initWithNibName:@"ShootingViewController" bundle:nil viewController:self];
    [self.view addSubview:shotView.view];
} else {
    iPad = 1;
    targetView = [[TargetViewController alloc] initWithNibName:@"TargetViewController" bundle:nil viewController:self];
    [self.view addSubview:targetView.view];
}

На стороне айФона Вы можете поменять содержимое функции peripheralManager, для передачи на айПад любых данных, которые Вам пригодятся на принимающей стороне. Это могут быть ускорения, результаты обработки видео, нажатия на кнопки, прочие события.

/** Catch when someone subscribes to our characteristic, then start sending them data
 */
- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic
{
    NSString *sendText = [NSString  stringWithFormat:@"%d,%d,%d,%@", _numShots, (int) xt, (int) yt, [[UIDevice currentDevice] name]];
    NSLog(@"Central subscribed to characteristic: %@", sendText);
    // Get the data
    self.dataToSend = [sendText dataUsingEncoding:NSUTF8StringEncoding];
    // Reset the index
    self.sendDataIndex = 0;
    // Start sending
    [self sendData];
}

Хочу предупредить, что объем за один раз передаваемых данных не должен превышать 30-50 байт. В противном случае связь часто теряется, соответственно теряются и пакеты.

Кроме того, если программа на айФон обрабатывает события от акселерометра 100 раз в секунду, то данные на айПад надо передавать не чаще 10-15 раз в секунду. В противном случае приложение может зависнуть, видимо забивается канал связи и айПад не успевает его обрабатывать.

Приложение Биатлон 2013

Самым первым я сделал приложение биатлон, симулятор стрельбы по мишеням. Вдохновленный победами Малышко и Шипулина на Кубке Мира, сделал его за день. Заготовки, правда уже были, типа примеры работы со звуком стрельбы. Две картинки все-таки пришлось позаимствовать из сети, отмасштабировать и вытереть водяные знаки.

АйФон является винтовкой с оптикой, через оптику прицеливаюсь на айПад и произвожу выстрел нажатием на экран айФона.

Для распознавания геометрии айПада, я рисую яркую синюю линию сверху стрельбища. Сначала я выбрал оранжевый цвет, но это работало только в условиях офиса. Дома кругом желтые лампы, и оранжевый цвет просто везде. Программа распознавания к сожалению плохая, просто вычитаю сверху вниз значения пикселов с условием наличия синей компоненты. Если играть в бело-синем офисе Интел, то распознавание работает плохо.

Но это проблемы стрелка, для подсказки я рисую визир зеленым цветом, который обозначает границы экрана айПада.

Биатлон 2013 в Апп Стор

Обычно все свои приложение я делаю бесплатными. Но вставляю рекламу. В это приложение ставить рекламу смысла нет — мало таких людей, кто обладает кучей яблочных последних девайсов.

С другой стороны, если человек имеет новомодные дорогие железки, то у него есть деньги. Пусть купит и приложение. За 5 баксов, так им, буржуям.

Выложил 6-ого числа биатлон за 5 баксов и забыл про него. И 15-ого января — рраз! — приложение одобрено и готово к продаже.
Делаю распродажу — иначе вообще без шансов, что заметят.
3 доллара. Тоже жирно.

Ну думаю, как обычно 1-2 скачки в первые пять дней, затем вялотекущие 50 скачек за год.

Ан нет, скачек побольше. Вот например сегодняшний отчет.

Title               Units        Price          Store
Biathlon 2013     11	  2.69 EUR	    DE   
Biathlon 2013       2	   2.69 EUR	    FR
Biathlon 2013       1        21 NOK           NO
Biathlon 2013       1       99 RUB            RU
Biathlon 2013       1       2.69 EUR          SI

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

А вот от публикации на Хабре 7000 просмотров обычно набирается. Но толку от них нет, на хлеб не намажешь.

Думаю, что это первое приложение в апп стор, использующее подобную технологию. Если нет — исправьте меня.

Прочие приложения

Трехмерный тетрис. Основан на вращении айФона, как твердого тела — передаю один номер из 24 позиций, в которые переворачивается фигура.

Диггер — классический досовский, управление с айФон. Передаю нажатие на к4 кнопки.

Вольфенштайн. Просто шутер — передаю угол поворота и событие выстрел.

Дартс. Имитация айФоном движения бросания дротиком. Отклонения акселерометра по осям преобразую в смещения икс — игрек на мишени.

В большинстве готовы на 50-90 процентов и пока меня не впечатляют.

Да, забыл! Теннис! Теннис классный! Сейчас скриншот сделаю.

Два дополнительных патрона, ноль штрафных кругов

В теннис играть интересно. На айПад я передаю только тип удара — слева или справа.

Автор: PapaBubaDiop

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js