iPhone6だといろいろ拡大されるっぽい
やっと、Xcodeが6.0.1になって、
シミュレータにiPhone6とiPhone6 Plusが追加されて、
そこで適当なサンプルを動かしてみたけど、
どーにもこーにも、画像が拡大されてしまう。
つまり、どういうことかというと、
現時点では、以下のようなコードで画像を生成すると、
画面解像度が高い分だけ、大きく表示される。
-(UIImage *) createButtonImage:(CGSize)size { UIGraphicsBeginImageContext( size ); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetRGBFillColor( context, .0, .0, .0, 1.0 ); CGContextFillRect( context, CGRectMake(2., .0, size.width - 4., size.height) ); CGContextFillRect( context, CGRectMake(.0, 2., size.width, size.height - 4.) ); CGImageRef imageRef = CGBitmapContextCreateImage( context ); UIGraphicsEndImageContext(); UIImage *image = [UIImage imageWithCGImage:imageRef scale:2.0 orientation:UIImageOrientationUp]; CGImageRelease( imageRef ); return image; }
関数名はさておき、ここで返ってくるUIImage
は、
iPhone5sとiPhone6における表示サイズが異なるので、
画面解像度に応じて、imageWithCGImage
のscale
を変更するとか、
その手の対策を打たなきゃいけないっぽい。
もしくは、大きな画像を用意しておいて、
解像度に応じたサイズに縮小して使うとか。
まだ、この辺の最適解は思いつかないです。。。
おしまい。
DPIを気にして表示サイズをきっちりmm系であわせないといけないアプリだと
GraphicsContextにアフィン変換matrixでDPIスケール変換かけて描画時におりゃーってやりましたけど
Spritekitとかどうするんでしょね
scaleが2.0であれば拡大されるので、それを良しとしないアプリを作る方法は分かんないですね。
じゃぁ、scaleさえ変えれば良いのか?って話も、Plusならscaleは3.0って話らしいですが、iPhone6だと???です。
なので、ベクトルから生成、もしくは大きな画像を実行時に縮小とか、思いつくのはその辺りですが、
もしかすると、ゲームであれば解像度に応じて大きくなる分には良いのでは?って思ってます。
シューティングであれば、弾の速度にも気を配る必要があるかもですが。
>シューティングであれば、弾の速度にも気を配る必要があるかもですが。
ぎゃー!
移動ベクタとか安直に持ってたらしんじゃう!
内部処理の座標系と表示するときの座標を別に考えたほうがいいのかも。
(OpenGLアプリ見たく)
そうそう、安直に移動ベクタを持ってるので、この辺はまずいなーと。
TriShootの時は、敵機を配置するのに、画面の幅や高さをn倍(1/2とか1/4)してたので、
そこまでは良かったんですが、移動速度だったり弾の速度だったり、
そういうのは内部処理と表示で座標系を分けた方が良さそうですね。