iPhoneやiPadで、端末を物理的に回転させずに、画面だけ回転させたいということありませんか?例えば、ターン制のゲームで、二人で向かい合ってプレイする場合などです。
デバイスの向きは読み取り専用のプロパティーで変更できません。そこで、画面全体を包含しているUIViewのtransformを設定することで画面を回転させます。後半部分はステータスバーの場所を切り替えています。ランドスケープ(横置き)の場合はこのままコピペで大丈夫です。ポートレート(縦置き)の場合は、適宜向きを書き換えてご利用ください。
- ( void ) flip{
self.view.transform = CGAffineTransformRotate( self.view.transform, 3.1415926535 ) ;
if ( [ UIApplication sharedApplication] .statusBarOrientation == UIInterfaceOrientationLandscapeRight) {
[ UIApplication sharedApplication] .statusBarOrientation = UIInterfaceOrientationLandscapeLeft;
} else {
[ UIApplication sharedApplication] .statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}
}
参考
How to rotate iPad screen upside down
Share and Enjoy
カメラで撮影した画像などを任意のサイズに変更する方法。
+ ( UIImage* ) imageWithImage: ( UIImage* ) image
scaledToSize: ( CGSize) newSize;
{
UIGraphicsBeginImageContext( newSize ) ;
[ image drawInRect: CGRectMake( 0 ,0 ,newSize.width,newSize.height) ] ;
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext( ) ;
UIGraphicsEndImageContext( ) ;
return newImage;
}
What’s the easiest way to resize/optimize an image size with the iPhone SDK?
Share and Enjoy
せっかくiPhone(iPad)アプリをリリースしたなら、評価してもらいたいですよね。ということで、レビューページにリンクする方法を調べてみました。以下のソースコードのapp_idを自分のアプリのIDに書き換えればOKです。
レビューボタンを押した時にこのメソッドを実行しましょう。
- ( void ) review
{
NSString * app_id
= @ "511819264" ;
NSString * url
= [ NSString stringWithFormat
: @ "itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=%@&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software" , app_id
] ;
[ [ UIApplication sharedApplication
] openURL
: [ NSURL URLWithString
: url
] ] ;
}
Share and Enjoy
Cocos2dを使って、簡単なボールシミュレータを作ってみました。画面には複数のボールが表示され、iPhoneを傾けるとボールが移動します。ボール間の当たり判定、ボールと壁の当たり判定が実装されています。
プロジェクトはGitHubからダウンロードしてください。
GitHub
https://github.com/realbasic/BallSimulator
ソースコード
主要な部分だけ貼り付けておきます。
- ( id ) init
{
// always call "super" init
// Apple recommends to re-assign "self" with the "super" return value
if ( ( self
= [ super init
] ) ) {
objectArray
= [ [ NSMutableArray alloc
] init
] ;
for ( int x
= 0 ; x <
5 ; x
++ ) {
for ( int y
= 0 ; y <
5 ; y
++ ) {
Weight
* weight
= [ [ Weight alloc
] initWithPosition
: ccp
( x
* 25 + 50 , y
* 25 + 50 ) ] ;
[ self addChild
: weight
] ;
[ objectArray addObject
: weight
] ;
}
}
[ [ UIAccelerometer sharedAccelerometer
] setUpdateInterval
: 0.05 ] ;
[ [ UIAccelerometer sharedAccelerometer
] setDelegate
: self
] ;
[ self schedule
: @selector ( nextFrame
: ) ] ;
}
return self;
}
- ( void ) accelerometer
: ( UIAccelerometer
* ) accelerometer
didAccelerate
: ( UIAcceleration
* ) acceleration
{
gx
= - acceleration.y
* 0.02 ;
gy
= acceleration.x
* 0.02 ;
}
- ( void ) nextFrame
: ( ccTime
) dt
{
for ( int i
= 0 ; i <
10 ; i
++ )
for ( Weight
* weight
in objectArray
) {
weight.vy
+= ( ( random
( ) % 100 - 50 ) / 10000.0 ) ;
weight.vx
+= ( ( random
( ) % 100 - 50 ) / 10000.0 ) ;
weight.vx
*= 0.999 ;
weight.vy
*= 0.999 ;
weight.vx
+= gx;
weight.vy
+= gy;
weight.position
= CGPointMake
( weight.position.x
+ weight.vx, weight.position.y
+ weight.vy
) ;
if ( weight.position.x <
10 ) {
weight.vx
= fabs ( weight.vx
) * 0.7 ;
weight.position
= ccp
( 10 , weight.position.y
) ;
} else if ( weight.position.x >
470 ) {
weight.vx
= - fabs ( weight.vx
) * 0.7 ;
weight.position
= ccp
( 470 , weight.position.y
) ;
}
if ( weight.position.y <
10 ) {
weight.vy
= fabs ( weight.vy
) * 0.7 ;
weight.position
= ccp
( weight.position.x,
10 ) ;
} else if ( weight.position.y >
310 ) {
weight.vy
= - fabs ( weight.vy
) * 0.7 ;
weight.position
= ccp
( weight.position.x,
310 ) ;
}
for ( Weight
* weight2
in objectArray
) {
if ( weight
== weight2
) break ;
double dx
= weight2.position.x
- weight.position.x;
double dy
= weight2.position.y
- weight.position.y;
double d
= sqrt ( dx
* dx
+ dy
* dy
) ;
if ( d < D
) {
double dvx
= weight2.vx
- weight.vx;
double dvy
= weight2.vy
- weight.vy;
double p
= ( dvx
* dx
+ dvy
* dy
) / d
* 0.9 ;
if ( p<
0 ) {
double px
= p
* dx
/ d;
double py
= p
* dy
/ d;
weight.vx
+= px;
weight.vy
+= py;
weight2.vx
-= px;
weight2.vy
-= py;
double mx
= - ( D
- d
) * dx
/ d;
double my
= - ( D
- d
) * dy
/ d;
weight.position
= ccp
( weight.position.x
+ mx, weight.position.y
+ my
) ;
weight2.position
= ccp
( weight2.position.x
- mx, weight2.position.y
- my
) ;
}
}
}
}
}
Share and Enjoy
cocos2dのバージョンを調べる方法。
NSLog( @ "%@" , cocos2dVersion( ) ) ;
// cocos2d v1.0.1
Share and Enjoy
BB Classic
ブロック崩しゲームの新バージョンをリリースいたしました。
バージョンアップの新機能
・難易度調整
・ステージ数が10に増加
・アイテムを実装(ボールが増える)
・GameCenterと連動
無料なので是非遊んでみてください!
Share and Enjoy
1ヶ月ほど前にブロックくずしゲーム「BB Classic 」をリリースしましたが、昨日、バージョン1.1の公開を申請しました。
新バージョンでは
・LeaderBoards(ランキング)に対応
・Achievements(一定の基準でメダルを貰える)に対応
・ステージ数が5から10に増加
・難易度を調整(だんだんボールが速くなる)
・アイテムの導入
など、多くの新機能を実装しています。
順調にいけば、来週の水曜日頃にリリースされる予定です。
Share and Enjoy
先程、iPhoneアプリの公開申請をしようとしたところ「No identities are available for signing」というエラーが発生しました。
XCodeをアップデートした際に、Provisioningファイルが失われていたようで、developer.apple.comの”iOS Provisioning Portal>Provisioning>Distribution”で、プロビジョニングファイルをダウンロードすると問題は解消しました。
参考
Error: “No identities are available for signing” Xcode 4.3.1
Share and Enjoy
GameCenterをサンドボックスモードにするには、「GameCenterからログアウトすればよい」はずなんですが、それだけではうまく切り替えることができませんでした。
以下の手順でサンドボックスモードに切り替わりました。
1. GameCenterからログアウトする。(GameCenterアプリのアカウント→ログアウト)
2. 全てのアプリを落とす。
3. iPhoneを再起動
4. GameCenterアプリの実機デバッグを開始。
Simulatorでは一発でサンドボックスモードになったのですが、実機では上記の手順を踏む必要がありました。
Share and Enjoy
本日の夕方で、ブロック崩しアプリを申請してから1週間になります。
過去の経験上、申請してから1週間で審査が開始され、その数時間後には結果が判明します。
ということで、一発で審査に通過すれば本日中にリリースできるはず\(^o^)/
Share and Enjoy
投稿ナビゲーション
iPhoneアプリ開発に関する情報を公開中 ソースコードもあるよ。