ユーザーがさまざまなタイプのオブジェクトと、開始時に値が0のラベルを収集するゲームがあります。ユーザーがオブジェクトを(それに触れることによって)収集するたびに、スコア=現在のスコア+1にする必要があります。次のコードで試しましたが、オブジェクトをクリックするとクラッシュします。
これは、画面に0を表示するスコアラベルのコードです。
score = 0;
scoreLabel1 = [CCLabelTTF labelWithString:@"0" fontName:@"Times New Roman" fontSize:33];
scoreLabel1.position = ccp(240, 160);
[self addChild:scoreLabel1 z:1];
そして、これは私がオブジェクトに触れるたびに呼び出すvoid関数です。
- (void) addScore
{
score = score + 1;
[scoreLabel1 setString:[NSString stringWithFormat:@"%@", score]];
}
そして、これは私がオブジェクトに触れるためのコードを置いた実際の部分です:
-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self ccTouchesMoved:touches withEvent:event];
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
for (Apple in self.appleArray)
{
if (CGRectContainsPoint(Apple.boundingBox, location))
{
[self addScore];
Apple.visible = NO;
}
}
スコア以外はすべて機能します。また、apple.visible = falseでアップルを非表示にするのではなく、アップルを非表示にする方法はありますか?このようにリンゴはまだそこにありますが見えないので、私はそれを取り除きたいです。
誰かが助けてくれることを願っています!
ご不明な点がございましたら、お気軽にお問い合わせください。
ありがとう。
これは私がリンゴを描くところです:
-(id) init
{
// always call "super" init
// Apple recommends to re-assign "self" with the "super's" return value
if( (self=[super init]) ) {
isTouchEnabled_ = YES;
self.appleArray = [CCArray arrayWithCapacity:20];
for (int i = 0; i < 5; i++) {
Apple = [CCSprite spriteWithFile:@"Apple4.png"];
[self addChild:Apple];
[appleArray addObject:Apple];
}
[Apple removeFromParentAndCleanup:true];
[self scheduleUpdate];
}
return self;
}
そして、これは画面が更新される場所です:
-(void) update: (ccTime) dt
{
for (int i = 0; i < 5; i++) {
Apple = ((CCSprite *)[appleArray objectAtIndex:i]);
if (Apple.position.y > -250) {
Apple.position = ccp(Apple.position.x, Apple.position.y - (Apple.tag*dt));
}
}
}