Июн 11

При работе с синглетоном Director на Cocos2d программа не реагирует на события касания при наличии в окне объекта “Scene“. Соответственно, реализация “UIApplicationDelegate” не получает уведомления “touchesBegan“.

Исправить эту особенность можно следующим образом:

1) внедрив протокол “TouchEventsDelegate” со следующей спецификацией:

1
2
3
4
5
6
7
8
9
10
11
/**Touch event delegate
* return YES if the event was handled
* return NO if the event was not handled
*/

@protocol TouchEventsDelegate
@optional
- (BOOL)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (BOOL)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (BOOL)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (BOOL)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
@end

2) связав с синглетоном обработчик событий:

1
[[Director sharedDirector] addEventHandler:(id)touchEventDelegateHandler];

Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (1 голосов, средний: 5.00 из 5)
Загрузка ... Загрузка ...
Комментариев: 2 »

Июн 11

Данный урок подразумевает знакомство с Cocos2d для iPhone (здесь мы будем работать с Cocos2d v. 0.7.1). Для базовой информации по Cocos2d можно прочесть инструкцию по установке здесь и урок Hello World.

Введение

К переходам, которые используются для переключения между объектами Cocos2d Scene, относятся такие эффекты, как wipe (вытеснение), fade (постепенное появление / исчезновение), zoom (масштабирование) и split (разделение). Класс “Scene” — производная “CocosNode“, по свойствам аналогичная “Layer“. В любой объект “Scene” можно добавить еще один “CocosNode“, например, “Layer” (один или несколько) или “Sprite” (один или несколько). Для обработки перехода служит представленный ниже код:

1
+(id) transitionWithDuration:(ccTime) t scene:(Scene*)s;

где “scene” — сцена, которая, появляясь, сменяет текущую, “time” — число секунд, которые длится переход. При применении перехода к сценам синтаксис будет следующим:

1
[[Director sharedDirector] replaceScene: [TransitionClass transitionWithDuration:duration scene:nextScene]];

Встречаются переходы со специализированными параметрами. Так, например, в “FadeTransition” в качестве дополнительного параметра присутствует цвет. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (1 голосов, средний: 2.00 из 5)
Загрузка ... Загрузка ...
1 Комментарий »

Июн 10

Мы уже останавливались на воспроизведении коротких звуков в игре/приложении. Теперь пришло время фоновой музыки. iPod допускает воспроизведение одного типа коротких звуков, а вот добавление фоновой музыки его отключает.
Для проигрывания фоновой музыки (т.е. звуков, не ограниченных по длительности 30 с) можно воспользоваться AVAudioPlayer. Нужный код приведен ниже (не забудьте добавить фреймворк “AVFoundation.framework“).

1
2
AVAudioPlayer *myAVsound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"backgroundMusic" ofType:@"caf"] ] error:NULL];
[myAVsound play];

Задача данного кода сводится к воспроизведению фоновой музыки [backgroundMusic.caf], но только один раз. Проделать это неоднократно поможет “NSTimer“: вызывайте [myAVsound play]. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (1 голосов, средний: 4.00 из 5)
Загрузка ... Загрузка ...
Комментариев: 3 »

Июн 09

В продолжение темы, рассмотренной в частях 1 и 2, мы будем и дальше работать с созданным ранее проектом, но на этот раз освоим воспроизведение базовых звуков. Для загрузки и озвучки воспользуемся одним из примеров Apple, который можно найти в Apple Developer Network под именем BubbleLevel (к сожалению, прямой ссылки нет, поскольку нужно входить под собственным логином).

Шаг 1

Итак, нам предстоит добавить к проекту аудиофайлы. iPhone дружит с форматом CAF. Использовать его не обязательно, но если решите, о создании и преобразовании CAF-файлов можно прочесть здесь (на английском языке) http://permadi.com/blog/?p=927. В нашем примере я будут работать с одним CAF-файлом и с одним MP3.

Импортируйте оба файла в группу “Resources” точно так же, как это делали это с изображениями (удерживая нажатой клавишу <Ctrl>, щелкните на пиктограмме “Resources” и выберите “Add Existing Files“). Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (Оцените приложение)
Загрузка ... Загрузка ...
Комментариев: 11 »

Июн 08

Объект “UIActivityIndicator“, чаще всего именуемый просто счетчиком, как правило, сообщает пользователю о прогрессе какой-либо операции.

activityindicatorsСчетчики “UIActivityIndicator” бывают трех типов: (слева направо) серый “UIActivityIndicatorViewStyleGray“, белый “UIActivityIndicatorViewStyleWhite“, большой белый “UIActivityIndicatorViewStyleWhiteLarge“.

Задействовать любой из них поможет приведенный ниже код:

1
2
3
UIActivityIndicatorView *myIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]];
myIndicator.center = CGPointMake(160, 240);
myIndicator.hidesWhenStopped = NO;

Как видим, в “initWithFrame” потребности нет, если по размеру большой белый счетчик отличается от малого белого и серого. Вместо этого задается его центральная точка.

Для добавления “UIActivityIndicator” в представление достаточно метода “addSubview“. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (1 голосов, средний: 5.00 из 5)
Загрузка ... Загрузка ...
Комментариев: 2 »

Июн 08

iPhone / iPod touch позволяет создавать “скриншоты”, сохраняя как изображение содержимое экрана. Многие пользователи даже не догадываются, но для этого достаточно одновременно нажать кнопки home и power. При работе с каталогом Camera Roll или сихронизации фотографий с компьютером каждый скриншот представляет собой изображение 320×480 пикселей.

В этом уроке я расскажу, как с помощью Quartz получать снимки экрана произвольного размера. Под произвольным размером подразумевается возможность сохранять не только часть экрана, но и представление целиком (а не только видимую часть), даже если его размеры превышают 320×480 пикселей.

Для начала к проекту нужно будет добавить фреймворк QuartzCore. Все фреймворки можно найти по следующей ссылке:/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/ iPhoneOSxxx.sdk/System/Library/Frameworks

Выделенная полужирным часть для каждого пользователя будет разной (в моем случае это iPhoneOS2.2.sdk). Кстати, попасть в папку “Frameworks” можно гораздо проще. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (Оцените приложение)
Загрузка ... Загрузка ...
Нет комментариев »

Июн 07

В этом уроке мы продолжим (первая часть) работу над простейшей игрой типа “космические пришельцы”. Нам предстоит внести в неё значительные изменения, о смысле которых чуть ниже.

Первым делом нужно реструктуризировать CSS код так, чтобы основная часть относящихся к игре объектов размещалась внутри элемента “div“. Так будет проще добавлять игровые элменты — внося их в контейнер “div” посредством “addChild“.

Отредактируйте “index.html” так, как показано ниже:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>GameShip</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.6">
    <meta name="apple-mobile-web-app-capable" content="YES">
<link rel="apple-touch-icon" href="Images/WebClipIcon.png">
<link rel="stylesheet" href="main.css">
    <script type="text/javascript" src="Parts/utilities.js" charset="utf-8"></script>
    <script type="text/javascript" src="Parts/setup.js" charset="utf-8"></script>
    <script type="text/javascript" src="main.js" charset="utf-8"></script>
    <script type="text/javascript" src="Parts/Text.js" charset="utf-8"></script>
</head>
<body onload="load();">
  <div id="content">
    <div id="background" class="background"
     ontouchmove="onTouchMoveHandler(event)" ontouchstart="onTouchStartHandler(event)"
     onmousemove="onMouseMoveHandler(event)">
      <div id="playerShip" class="playerShip"
        ontouchmove="onTouchMoveHandler(event)" ontouchstart="onTouchStartHandler(event)"
        onmousemove="onMouseMoveHandler(event)">
      </div>
    </div>
  </div>
</body>
</html>

Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (Оцените приложение)
Загрузка ... Загрузка ...
1 Комментарий »

Июн 06

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

  • динамическая загрузка изображения с “UIImageView“,
  • работа с массивами

Шаг 1

Откройте созданный в части 1 проект “Ball“.

Шаг 2

Импортируйте еще одно изображение в группу “Resources” (можно воспользоваться прежним, но гораздо интереснее будет добавить новое).

Шаг 3

Для хранения второго мяча нам потребуется еще одна переменная, поэтому откройте файл “BallViewController.h“. Назовем второй мяч “mBall2” (не самое удачное имя — в реальном приложении лучше иметь дело с массивами).

1
2
3
4
5
6
7
8
9
10
11
#import

@class Ball;

@interface BallViewController : UIViewController {
IBOutlet Ball* mBall;
Ball* mBall2;
}
@property(retain, nonatomic) IBOutlet Ball* mBall;
@property(retain, nonatomic) Ball* mBall2;
@end

Обратите внимание: модификатор “IBOutlet” мы не включаем, поскольку не будем ссылаться на “mBall2” из редактора Interface Builder. Впрочем, вреда от его присутствия не будет. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (2 голосов, средний: 5.00 из 5)
Загрузка ... Загрузка ...
1 Комментарий »

Июн 05

Dashcode — еще один инструмент Apple iPhone SDK, предназначенный для создания простых приложений. В этом уроке на его примере мы рассмотрим анимацию и интерактивность (подразумевается знакомство с JavaScript и CSS).

В качестве примера возьмем фреймворк игры типа “космические пришельцы”: внизу экрана находится космический корабль, перемещаемый касаниями к экрану.

Создайте новый проект, воспользовавшись шаблоном “Custom“.

Создаем папку “Local Deploy”

Чтобы импортировать изображение корабля, проекту необходимо присвоить статус “Share“, — тогда Dashcode создаст папку размещения. Щелкните по пиктограмме “Share“.

dashcodeshareicon

Появится запрос на место сохранения/размещения. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (Оцените приложение)
Загрузка ... Загрузка ...
1 Комментарий »

Июн 04

Иногда меня спрашивают, где взять iPhone SDK. Для начала вам понадобится:

  •  компьютер с Mac OS X Leopard;
  • Xcode IDE (инструмент разработки от Apple)
  • iPhone SDK

Сам iPhone для разработки не обязателен — в iPhone SDK предусмотрен симулятор устройства для запуска приложений iPhone. Однако планирующим тестировать приложения и продавать через магазин Apple без него не обойтись.

Нужен ли Мак для работы с Mac OS X Leopard? Я читал, что с этой ОС могут работать некоторые нетбуки, но сам не пробовал и не уверен, что это стоящий способ, особенно для новичков в мак-мире. Желающим попробовать свои силы в нестандартных подходах рекомендую следующие ссылки:
http://gadgets.boingboing.net/2008/12/17/osx-netbook-compatib.html
http://www.engadget.com/2008/10/03/dell-mini-9-hacked-to-run-os-x/
http://gizmodo.com/5156903/how-to-hackintosh-a-dell-mini-9-into-the-ultimate-os-x-netbook

Где взять Xcode?

На моем MacBook Pro ПО Xcode находится на втором установочном диске Mac OS X Leopard. Программа не устанавливается по умолчанию вместе Mac OS X Leopard — попробуйте сделать это с диска.

Есть вариант, что программа уже установлена (обычно это Macintosh HD::Developer::Application). Если такой папки нет, попробуйте воспользоваться Finder. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (9 голосов, средний: 4.78 из 5)
Загрузка ... Загрузка ...
Комментариев: 5 »