× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
![]() |
アプリをデバイスでビルド&実行しようとしたら、こういうエラーが出た。
そのうち、アプリの転送もできなくなって、 Macとデバイスの一方または両方をリブートしてくださいと言われた。 シミュレータでは起動できるようだ。 iPadを再起動したら、元に戻ったけど。 PR |
![]() |
「新世界より」
作者は貴志 祐介。 文庫3冊で長いんだけど、あっという間に読めた。 よく練られた世界と、人物像。謎と設定。 現代文明が頽廃した後、わずかに生き残った人類が生きる未来の世界。この辺はナウシカと似てる。 舞台は1000年後の日本。 科学文明は滅び、生き残ったわずかな人類は呪力という超能力を得ていた。 呪力は念動力のことである。周囲のものに力を及ぼし、モノを動かしたり、光を作ったり、飛んでくる矢を止めたり、さらに特に呪力の強い人間は、自分が宙に浮いたりすることができる。 かつては、呪力を覚えた人間と、覚えていない人間の間で大戦争が起こり、呪力を持つ人間が残った。 呪力を持つ人間は、他の人間を殺してはいけない愧死機構が遺伝子に埋め込まれている。人間を殺したことを脳が認識すると、愧死機構が発動し、その人間は心停止して死んでしまう。だから人間は殺人を犯すことができない。 また、突然変異によって業魔と悪鬼という人間が生まれることがある。 業魔は、自身の呪力が周囲に溢れ出し、周りに天変地異を起こす危険な存在。自分でそれを止めることができない。 悪鬼は、愧死機構が働かなくなった人間で、理性が無く周囲の人間を次々と殺していく最も恐ろしい存在。これが現れると必ず大勢の人間が殺されてきた。しかも、普通の人間は愧死機構が働くため、悪鬼を殺すことができない。 人間の住む町の周囲には、バケネズミと呼ばれる種族が生きている。 大きさは人間の子供くらいで、知能は人間と同等程度ある。言語能力も有しており、さらに一部のバケネズミは人語を解する。 バケネズミはコロニーを作って高等な社会生活をしている。戦闘能力もあるが、人間の呪力の前には無力であるため、常に人間の決めたルールの下で生きている。 文庫では上中下3巻構成。 上巻は冒険活劇風。主人公の少女と友人たちが、バケネズミの戦争に巻き込まれる。 中巻下巻は詳しく書かないが、世界の設定を巧みに使ったストーリーが展開される。 この作者のミステリーの中でも最も面白いと評されている。 読んでいると止まらなくなる。 ちなみにタイトルの由来は、ドヴォルザークの「新世界より」から採られている。 ドヴォルザーク:交響曲第8番&第9番「新世界」 前文明の謎や、今の文明の成り立ちに迫っていく感じは、漫画版ナウシカを思い出した。 読んでいて続きが気になる度は「新世界より」のほうが上。 ナウシカはだんだんストーリーやナウシカの考え方についていけなくなるけど、「新世界より」は最後まで読者を引っ張っていってくれる。 |
![]() |
テクスチャ描画する関数の決定版(?)。
汎用的にするのが目標。 機能は多彩。でも使い方は簡単。そういう風に、私はなりたい。 というわけで、 関数としては1つだけ。 void drawTexture(SpriteData data); これ以上ないくらい単純明快。 では解説していきます。 drawTextureができること(いずれ他にも出てくるかも) ・テクスチャを指定できる ・描画する座標を指定できる ・描画サイズを指定できる ・アンカーポイントを指定できる ・回転して描画できる ・uv座標の切り取りができる ・減色ができる これらのことを全部やるには、指定すべき変数がかなり多くなります。 それをぜんぶ関数の引数に持たせるのは冗長。 オーバーロードするにも組み合わせが多いし、デフォルト引数で対応するのも難しい。 という訳で、引数としては構造体を一つ渡すだけにしました。 この構造体にすべての変数が入っています。
|
![]() |
![]() |
フォント描画の仕方。
enum CGTextDrawingMode { kCGTextFill, //塗りつぶし kCGTextStroke, //枠だけ kCGTextFillStroke, //枠と塗りつぶし kCGTextInvisible, //非表示 kCGTextFillClip, //クリップ範囲の背景と塗りつぶし kCGTextStrokeClip, //枠と背景 kCGTextFillStrokeClip, //塗りつぶしと枠と背景 kCGTextClip //クリップ範囲内の背景と文字塗りつぶしだけ }; クリップ範囲ってどう決めるんだ? テキストエンコーディングをMacRomanにしたい場合、 CGContextSelectFont() CGContextShowTextAtPoint() そうでない場合、 CGContextSetFont() またはCGFontCreateWithPlatformFont() CGContextSetFontSize() CGContextShowGlyphsAtPoint() 注意:こちらの方式でフォントをセットした場合、描画はCGContextShowGlyphsAtPoint()を使うこと。 この指定だと、エンコーディングが指定できない。その場合、デフォルトのエンコーディングであるkCGEncodingFontSpecificが使われるため、CGContextShowTextAtPoint()が正しい動作をする保証がないらしい。 グリフを使った描画
グリフって何? 公式サンプル 公式リファレンス |
![]() |
描画命令のいろいろを書いていきます。
コンテキストを表すctxはCGContextRef型の変数. 色を表すr,g,b,aはCGFloat. 0.0~1.0で指定。 widthはCGFloat. その他はenumなど。 /////////////// 色指定・線の色 CGContextSetRGBStrokeColor(ctx, r, g, b, a); /////////////// 色指定・塗りつぶし色 CGContextSetRGBFillColor(ctx, r, g, b, a); /////////////// 線の太さ指定 CGContextSetLineWidth(ctx, width); |
![]() |
CoreGraphics描画の詳細。
大まかな流れは前回の記事参照。 //////////////////////////////// コンテキストを自分で作成する カレントコンテキストはもともとあるので、そこに直接描画すれば画面に表示することはできる。 しかし、自分でコンテキストを作ることももちろんできる。 ファイルSimpleCoreGraphicsView.h
|
![]() |
CoreGraphicsで描画するまでの流れ。
5分あればイケます。 |
![]() |
CGRectのような、 x,y,w,h を保持する矩形構造体は、
矩形が座標系に直交していることを前提としている。 だから、ナナメに置いてある長方形や他の矩形を表すことができない。 テクスチャをナナメに描画したい場合もあるので、それは x,y,w,h,angle と傾け角度も含めて表すか、 (あるいはpos, anchorPoint, angle で座標とアンカー点と傾け角度で渡す) point1,point2,point3,point4 で4点を直接持つ矩形構造体にするかが必要だ。 テクスチャ描画目的なら、矩形であることはたぶん前提なので、1番目で良さそうだ。 ゲームロジックに使う汎用四角形で3番目を使えば良さそう。 ※矩形=長方形 |
![]() |
ほかのアプリの通知が割り込んだときのエラー
2011-02-13 12:29:57.121 pball[3465:307] -[__NSCFType fire]: unrecognized selector sent to instance 0x134fd0 2011-02-13 12:29:57.196 pball[3465:307] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType fire]: unrecognized selector sent to instance 0x134fd0' *** Call stack at first throw: ( 0 CoreFoundation 0x3587a987 __exceptionPreprocess + 114 1 libobjc.A.dylib 0x34a8249d objc_exception_throw + 24 2 CoreFoundation 0x3587c133 -[NSObject(NSObject) doesNotRecognizeSelector:] + 102 3 CoreFoundation 0x35823aa9 ___forwarding___ + 508 4 CoreFoundation 0x35823860 _CF_forwarding_prep_0 + 48 5 pball 0x00003e93 -[pballViewController startGame] + 38 6 pball 0x00003437 -[pballAppDelegate applicationDidBecomeActive:] + 46 7 UIKit 0x341d993f -[UIApplication _setActivated:] + 74 8 UIKit 0x341d98dd _alertItemStateChanged + 52 9 CoreFoundation 0x358310cd __CFNotificationCenterDarwinCallBack + 24 10 CoreFoundation 0x35817be7 __CFMachPortPerform + 210 11 CoreFoundation 0x3580f6ff __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 26 12 CoreFoundation 0x3580f6c3 __CFRunLoopDoSource1 + 166 13 CoreFoundation 0x35801f7d __CFRunLoopRun + 520 14 CoreFoundation 0x35801c87 CFRunLoopRunSpecific + 230 15 CoreFoundation 0x35801b8f CFRunLoopRunInMode + 58 16 GraphicsServices 0x320c84ab GSEventRunModal + 114 17 GraphicsServices 0x320c8557 GSEventRun + 62 18 UIKit 0x341dc329 -[UIApplication _run] + 412 19 UIKit 0x341d9e93 UIApplicationMain + 670 20 pball 0x0000332b main + 74 21 pball 0x000032dc start + 40 ) terminate called after throwing an instance of 'NSException' プログラムはシグナルを受信しました:“SIGABRT”。 warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found). |
![]() |