[objecitve-c]NSString#01

NSStringの使い方メモ#01

生成

NSString*s=@"やぁ";

文字とか数字とかと結合

NSString*t=@"あいうえお";
NSString*s=[NSString stringWithFormat:@"%@ABC%fDEF%d",t,3.14159265,52];
NSLog(@"%@",s);

出力結果
あいうえおABC3.141593DEF52

型変換

NSString*t=@"323";
int d=[t intValue];
float f=[t floatValue];
double w=[t doubleValue];
BOOL flg=[t boolValue];

文字数

NSString*t=@"323";
int d=[t length];
NSLog(@"length:%d",d);

出力結果
length:3

比較

NSString*t=@"ktyr";
BOOL flg=[t isEqualToString:@"ktyr"];
NSLog(@"flg:%d",(flg)?1:0);

文字列分割

NSString*t=@"ktyr.report";
NSArray*n=[t componentsSeparatedByString:@"."];

[cocos2d]CCMenu

cocos2dでボタンを作るときはCCMenuが便利。
使い方

CCNode*setting=[CCNode alloc]init];
[self addChild:setting];

CCMenu*settingmenu=[[CCMenu alloc]initWithItems:nil vaList:nil];
[setting addChild:settingmenu z:21];
settingmenu.positionInPixels=CGPointZero;

CCMenuItemImage*item=[CCMenuItemImage itemFromNormalImage:@"ボタンの画像" selectedImage:@"タッチした時のボタンの画像" target:self selector:@selector(whenSettingTap:)];
[item setAnchorPoint:CGPointMake(0.0, 1.0)];
item.positionInPixels=ccp(195.0, 480.0-0.0);
[settingmenu addChild:item z:22 tag:5];

上記の例ではCCMenuを作ってからCCMenuItemを追加していますが、

CCNode*setting=[CCNode alloc]init];
[self addChild:setting];

CCMenuItemImage*item=[CCMenuItemImage itemFromNormalImage:@"ボタンの画像" selectedImage:@"タッチした時のボタンの画像" target:self selector:@selector(whenSettingTap:)];
[item setAnchorPoint:CGPointMake(0.0, 1.0)];
item.positionInPixels=ccp(195.0, 480.0-0.0);
item.tag=5;

CCMenu*settingmenu=[CCMenu menuWithItems:item, nil];
[setting addChild:settingmenu z:21];
settingmenu.positionInPixels=CGPointZero;
settingmenu reorderChild:item z:22];

というクラスメソッドを使った書き方も出来る。

[cocos2d]サウンド

iPhone Game「社畜!ナカムラくん」で実践した方法。

initメソッドあたりでmp3ファイルをpreloadしておきます。

#import "SimpleAudioEngine.h"
[[SimpleAudioEngine sharedEngine] preloadBackgroundMusic:@"bgm.mp3"];//BGM
[[SimpleAudioEngine sharedEngine] preloadEffect:@"clock.mp3"];//サウンドエフェクト

BGMを鳴らすときは

[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"bgm.mp3" loop:YES];

サウンドエフェクトを鳴らすときは

[[SimpleAudioEngine sharedEngine] playEffect:@"clock.mp3"];

ボリュームの調整

[SimpleAudioEngine sharedEngine].backgroundMusicVolume=1.0;
[SimpleAudioEngine sharedEngine].effectsVolume=0.5;

BGM一時停止

[[SimpleAudioEngine sharedEngine] pauseBackgroundMusic];

BGM再開

[[SimpleAudioEngine sharedEngine] resumeBackgroundMusic];

[objective-c]グローバルメソッド,定数

グローバルメソッドを設定する。
AppDelegate.hの@interfaceの手前に記述する。pchに記述でもok。
下記は2座標間の距離を返すメソッドと指定した範囲で乱数を返すメソッド。

#define get_dist(px1,py1,px2,py2) sqrt((px2-px1)*(px2-px1)+(py2-py1)*(py2-py1))
#define get_random(st,en) (arc4random()%ABS(en-st))+st;

定数はこんな感じ

#define HOGEHOGE 0

[cocos2d]CCMoveTo 座標を移動させる

CCSpriteなどの座標を移動させる方法。

CCMoveTo,CCRotateToなどがある。
CCSpriteを今の座標から110.0,110.0へイーズインアウトで移動させる時

CCSprite*sp=[CCSprite spriteWithFile:@"sc02.png"];
[self addChild:sp];
id moveto=[CCMoveTo actionWithDuration:0.4 position:ccp(110.0,110.0)];
id ease=[CCEaseInOut actionWithAction:moveto rate:2.0];
[sp runAction:ease];

止める時

[sp stopAllActions];

参考サイト
cocos2d for iPhone: Class List

[cocos2d]CCSequence#01

CCSpriteなどを「移動して5秒待って回転してメソッド実行」のような複合アクションさせる方法。
よく忘れるのでメモ

-(void)testFunc{
    NSLog(@"hello");
}
CCSprite*sp=[CCSprite spriteWithFile:@"sc02.png"];
[self addChild:sp];
id moveto=[CCMoveTo actionWithDuration:0.4 position:ccp(110.0,110.0)];
id ease=[CCEaseInOut actionWithAction:moveto rate:2.0];
id roll=[CCRotateTo actionWithDuration:1.0 angle:74.0];
id act_func=[CCCallFunc actionWithTarget:self selector:@selector(testFunc)];
CCSequence*seq=[CCSequence actions:ease,[CCDelayTime actionWithDuration:5.0f],roll,act_func,nil];
[sp runAction:seq];

参考サイト
CCSequence Class Reference

[iPhone Apps]PencilPhoto(鉛筆フォト)

iPhoneアプリ「鉛筆フォト」をリリースしました。
鉛筆フォトは写真を鉛筆で描いたような写真に加工するアプリです。
Twitter,Facebookに対応しており、作った写真をすぐにアップロードすることが出来ます。

主な機能
■撮った写真または保存されている写真を鉛筆で描いたような写真に加工できます。
■線のきめ細かさを調整できます。
■明るさを調整できます。
■写真をTwitterへアップロードできます。
■写真をFacebookへアップロードできます。
■写真を使用中のiPhone,iPodへ保存できます。

PencilPhoto is photo retouch App.
You can convert photos to image drawn with the pencil.
And You can upload photos to Twitter,Facebook.

Features
■Enable to convert photos to image drawn with the pencil.
■Enable to adjust pencil detail.
■Enable to adjust brightness.
■Enable to upload photo to Twitter.
■Enable to upload photo to Facebook.
■Enable to save photo to your device.


鉛筆フォト
鉛筆フォト


PencilPhoto

鉛筆フォト鉛筆フォト

鉛筆フォト鉛筆フォト

[cocos2d]CCSprite#02 タイリングする

CCSpriteについて#02

タイリングする方法。下記コードでできる。

CCSprite* s=[CCSprite spriteWithFile:@"bridge.png":];
[s setAnchorPoint:CGPointMake(0.0, 0.5)];
ccTexParams params = {GL_LINEAR,GL_LINEAR,GL_REPEAT,GL_REPEAT};
[s.texture setTexParameters:¶ms];
[s setTextureRect:CGRectMake(0.0,0.0,42.0*4.0,62.0)];

と、思ったらうまくいかない。


この画像をタイリングしようとすると
本当は下記のようになって欲しい

理想

現実

何故か隙間が出来る。OpenGLESは2の累乗ピクセルおきにタイリングするらしい。
widthが20pxなら32pxおきにタイリング。今回の画像はwidthが42pxだから64pxおきにタイリングされる。

うまいこと2の累乗ピクセルの画像にするしかない。

[cocos2d]CCSprite#01

CCSpriteについて#01

ファイルから

CCSprite*sp=[CCSprite spriteWithFile:@"image.png"];

中心点を設定する。デフォルトは(0.5,0.5)になっています。

[sp setAnchorPoint:ccp(0.0,0.0)];

画像の十字のところが中心点。ここを中心に拡大したり、回転したりします。


  • [sp setAnchorPoint:ccp(0.0,0.0)];

  • [sp setAnchorPoint:ccp(0.5,0.5)];

  • [sp setAnchorPoint:ccp(1.0,1.0)];

参考サイト
CCSprite Class Reference

[Xcode]アプリ名のローカライズ

よく忘れるのでメモ。

1. Resourceなどを右クリックして「New File」
2. Strings Fileを選択
3. ファイル名をInfoPlist.stringsに
4. InfoPlist.stringsを選択して右カラムのLocalizationの「+」で言語を追加
5. 出来たInfoPlist.strings(English)を選択し下記を記述

CFBundleName = "hoge";
CFBundleDisplayName = "hoge";

参考画像