読者です 読者をやめる 読者になる 読者になる

hellkite 日記と雑記とメモ。

Shiki Kazamaの駄文と音楽と、時々技術な感じ

マルチタッチ処理とスプライトの表示ができた


スポンサーリンク


手探り状態で進めているアプリ開発。ようやく画面に反応が出るようになりました・・・。
といっても、タッチした場所にスプライトが表示されるというそれだけのものですが・・・。


このくらいなら簡単だと思ったけど、比較的苦戦。原因は、Objcetive-Cとcocos2dの知識のなさ・・・かな。もう少しさっくりと進めるようにならないと・・・時間を費やした割には、ということになりかねない。。
あと、マルチタッチのサンプルはあるんだけど、1つのタッチイベントを使用するサンプルが多くて、複数のタッチイベントを取得する方法がなかなか見つからなかったこと。
結局、ネット上の情報では足りずに、買ってあったiPad開発の本のサンプルを見てなんとかなりました。

iPadプログラミングの作法
橋本佳幸
秀和システム
売り上げランキング: 13617
おすすめ度の平均: 3.0
3 プログラミング事例はいい
4 iPadプログラミングの作法
1 購入後の感想
3 後半部分のプログラミング例は役に立つが、前半部分は「iPad ヒューマン インターフェイス ガイドライン」の劣化バージョン
5 iPhoneとの共通点と違い、iPadへ移行するには

買っておいて良かった・・・。


というわけで、以下はコード例。cocos2dというか、Objective-Cをあまり知らないから致命的なバグがあるかもしれないけれど・・・。

//  GamePlayerLayer.h

#import "cocos2d.h"


@interface GamePlayerLayer : CCLayer {
}
@end
//  GamePlayerLayer.m

#import "GamePlayerLayer.h"


@implementation GamePlayerLayer

-(id) init {
	if ((self = [super init])) {
		CGSize winSize = [[CCDirector sharedDirector] winSize];
		
		// Enabled multi touch
		self.isTouchEnabled = YES;
	return self;
}

-(void) dealloc {
	[super dealloc];
}

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
	// get points
	int count = [[event allTouches] count];
	if (count > 0) {
		NSLog(@"touch!! : %d", count);

		for (UITouch* touch in touches) {
			CGPoint pt = [touch locationInView: [touch view]];
			pt = [[CCDirector sharedDirector] convertToGL:pt];	// convert display's position
			
			// draw sprite
			CCSprite* player = [CCSprite spriteWithFile:@"PlayerPoint.png" rect:CGRectMake(0, 0, 128, 128)];
			player.position = ccp(pt.x, pt.y);		// set draw position
			player.scaleX = 0.5;					// set scales
			player.scaleY = 0.5;
			[self addChild:player];					// add player(CCSprite)
			
			NSLog(@"touch!! %f, %f", pt.x, pt.y);
		}
	}	
}

@end


参考にしたサイト
Ni chicha, ni limona -平均から抜けられない僕-
http://www.peacepipe.jp/blog/?p=467