Cocos2d Downloadからダウンロード
cd xxxx/cocos2d-iphone-2.0/ ./install-templates.sh
#import "CCBReader.h"
[CCBFileUtils sharedFileUtils];
//[director_ pushScene: [IntroLayer scene]];
[CCBReader unzipResources:@"ccb.zip"];
CCScene* scene = [CCBReader sceneWithNodeGraphFromFile:@"CCBTest.ccbi"];
[director_ pushScene: scene];
「今日からライオンでも使える!XCODE4.4 MODERN OBJECTIVE-C SYNTAXでコードをきれいにする方法」を参考に、早速試してみました。 ---2012/09/06追記 参考:Objective-C Literals
@property で宣言した変数は、自動的に @synthesizeをコード補完してくれます。
@property (nonatomic) NSString *name;
@property (nonatomic) float time;
... @synthesize がいらない ...
- (void)bind {
_name = @"Mike";
_time = 10.0f;
}
これは省略もそうですが、コードの統一感という点で非常に大きな意味があると思います。 今までだと、アンダースコアをつけなかったり適当にコーディングできましたから。
NSArray は @[...] で、NSMutableArray は [@[...], mutableCopy] で記述
@property (nonatomic) NSString *name;
@property (nonatomic) float time;
- (void)bind {
NSArray *values1 = @[
@"1_setting01.png",
@"1_setting02.png",
@"1_setting03.png",
@"1_setting04.png",
];
NSMutableArray *values2 = [@[
@"1_setting01.png",
@"1_setting02.png",
@"1_setting03.png",
@"1_setting04.png",
]
mutableCopy];
}
---2012/09/06追記 Object Subscripting ってのが追加されているようです。 今まで、NSArray や NSDictionary ではのキーによるデータ取得はC言語のような(?)記述では取得できませんでしたが、これもできるようになりました。
int cArray[] = { 100, 200, 300 };
NSArray *nsArray = @[ @100, @200, @300 ];
cArray[1]; // 200
nsArray[1]; // @200
NSMutableArray *nsArray = [@[ @100, @200, @300 ] mutableCopy];
nsarray[1] = @33;
これは、かなり嬉しい構文ではないでしょうか?
int,float を NSNumber に変換とか、リテラル値の変換を省略できるようになりました。
- (void)update:(int)score :(float)time {
NSMutableDictionary *value = [NSMutableDictionary dictionary];
[value setValue:@(score) forKey:@"score"];
[value setValue:@(time) forKey:@"time"];
}
さらに、NSMutableDictionary を省略すると
- (void)update:(int)score :(float)time {
NSMutableDictionary *test = [@{@"score":@(score), @"time":@(time)} mutableCopy];
}
NSArrayの重複判断をするのに今まで Iterate とかしてたのですが、containsObject っていうメソッドが凄く便利です。
function addUniqueValue:(NSInteger )value {
NSNumber *number = [NSNumber numberWithInt: value];
if(![values containsObject:number] ){
[values addObject:number];
}
}
valueForKey とか objectAtIndex だとエラーを考慮しないといけない点もありますしね。 ただ、中身が配列とかだと Iterate しないといけないかとは思います。。。
会社でスマホサイトの切り分けどうやるの?って聞かれたのでちょっと実装してみる。
var sp_url = 'スマホのURL';
var default_msg = "このサイトはスマートフォン対応です。【OK】でスマートフォンサイト、【キャンセル】でPCサイトを表示します。";
var is_sp = isUserAgentSP();
if (is_sp) {
var cookie_mode = $.cookie('mode');
if (!cookie_mode) {
if (confirm(default_msg)) {
$.cookie('mode', 'sp');
location.href = sp_url;
} else {
$.cookie('mode', 'pc');
}
} else {
var mode = getUrlVars()["mode"];
if (mode == 'sp') {
$.cookie('mode', 'sp');
location.href = sp_url;
}
}
} else {
$('.mode_url').css('display', 'none');
}
function getUrlVars() {
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for (var i = 0; i 0
&& navigator.userAgent.indexOf('iPad') == -1)
|| navigator.userAgent.indexOf('iPod') > 0
|| navigator.userAgent.indexOf('Android') > 0);
}
(1) UserAgentの取得 (2) URLのパラメータを解析してもーで「mode=sp」を取得 (3) cookie で保存して判別(この場合、mode に sp を保存) (4) PC接続の場合、 class="mode_url" の要素を display:none に変更
UserAgent(iPhone, iPad, iPod, Android)とCookieでやってるので完璧ではないです。 スマホなので、フラグ保存はWebDataStrageを使った方がかっこいいかとは思います。
最近、HTML5を高速化する方法が流行ってますね。
HTML5でアプリ!と言ってもやはりネイティブに比べると格段に遅いです。 とくに相対的にスマホやタブレットアプリの処理では顕著だと思います。 ブラウザベースなので、基本どうやってもネイティブには勝てないと思いますが、それでも現状より速くする手法は色々ありますよね。
サイバーエージェントの中の人、「HTML5 Web Applicationのつくりかた」の記事も参考にちょっとメモしてみました。
小さな画像はCSSに直接画像をbase64で埋め込む。
みたいな
画像をbase64に変換するには、プログラミングするもよし、ツールを使うもよし。
ちなみにPHPだったら、
いわゆる1枚画像で座標を指定して、画像をパーツを表示する手法 ゲームのテクスチャでよく使われる手法ですね。
ちなみに、Adobe Fireworks CS6からは標準で書き出し機能が搭載されました。 (それ以前は機能拡張で対応) CSSスプライト書き出し機能の使い方
これは言わずもがな。 ただ、高機能な分面倒かな?と
var ctx = canvas.getContext('2d');
var img = new Image();
img.src = '画像URL';
$("#sample").attr('width', img.width);
$("#sample").attr('height', img.height);
ctx.drawImage(img, 0, 0, img.width, img.height);
※jQuery利用
画像サイズを取得して、Contextに描画する際にサイズ指定します。 事前にサイズがわかってる場合はCanvasにサイズ指定すればいいですが、それってどうよ?と個人的には思います。
MacBookPro Retinaの登場によりこれから、高解像度にも柔軟に対応する必要がでてきました。 そこで登場するのが恐らくSVGの技術かと。
Ai→Canvasっていうプラグインを使うと、ベジェ曲線とかパス情報データを書き出してくれます。 で、これをCanvas の Context に直接わりあてる何とも合理的な方法です。
転送データをJSONにしたり、圧縮をかける事によりデータ転送を減らすようにしてます。 (流石はソーシャルの中の人)
gzip転送する場合は、Apacheで mod_deflat を有効にする必要があります。
まぁ、普通のサービス運営ではここまでする機会はないとは思いますが、知っておく知識ではありますね。
SassはCSSを拡張して、効率よくコーディングできるメタ言語です。 ※「Sassを覚えよう!」、「Sass、そしてSassy CSS (SCSS)」などを参考
環境構築は「Scout」を利用します。 OSX専用なら「Codekit」ってのもあります。
Sassは、それだけでトピックが長くなりそうなので割愛(と言うか勉強中)
OptiPNGで必要の無い情報を削除し、画像容量を軽量化します。 画像数が多い場合には有利。
ちょっと高速化から話がずれますが、ブラウザ上でローカル処理をするとURLリンクが活用できません。 window.onhashchange を利用してページ遷移の履歴みたいに利用します。
http://hoge.com/page1#1
みたいな。 これでネット検索でアクセスした時に同じ結果を出す事ができます。
これも画像とは関係ないですが、HTMLの軽量化になるかと。 ただファイルアップする度にやる必要があるので、自動化する仕組みを作っておかないと忘れがちな作業ではありますが・・・。