0

私はObjectiveCとアプリ開発に不慣れなので、気楽にやってください!基本的なゲームを作成しようとしていますが、ユーザーの指が画面上にあるときにスプライトを左または右に連続して移動する必要があります-左側を左に、右を右に...更新を使用して繰り返します1/60秒ごとに数ピクセルの動き。これまでのところ、これは私が持っているものです(そしてフォーマットについて申し訳ありません):

    #import "GameplayLayer.h"

    @implementation GameplayLayer

    -(id)init {
         self = [super init];
         if (self != nil) {
         CGSize screenSize = [CCDirector sharedDirector].winSize;  
          // enable touches
         self.isTouchEnabled = YES;  

     blobSprite = [CCSprite spriteWithFile:@"blob.png"];
    [blobSprite setPosition: CGPointMake(screenSize.width/2, screenSize.height*0.17f)];

    ball = [CCSprite spriteWithFile:@"ball.png"];
    [ball setPosition:CGPointMake(10, screenSize.height*0.75f)];

    [self addChild:blobSprite];  
    [self addChild:ball];

    [self schedule:@selector(update) interval:1.0f/60.0f];

   }
   return self;
 }



    -(void) update:(ccTime)dt{
      if (_tapDownLeft == YES){
         blobSprite.position.x==blobSprite.position.x-5;
      }
     if (_tapDownRight == YES){
         blobSprite.position.x==blobSprite.position.x+5;
     }
    }


-(void) ccTouchesBegan:(UITouch*)touch withEvent: (UIEvent *)event{

 CGPoint touchLocation = [touch locationInView:[touch view]];
 touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];

if (touchLocation.x > 400) {
   if ((blobSprite.position.x+10)<460){
           _tapDownRight = YES;
      }
}

if (touchLocation.x < 200) {
    if ((blobSprite.position.x-10>20)){
           _tapDownLeft = YES;
      } 
}

else {
    _tapDownLeft = NO;
    _tapDownRight = NO; 
      }   
}
 -(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event{
      _tapDownLeft = NO;
      _tapDownRight = NO;
      }



-(void) registerWithTouchDispatcher{
  [[CCTouchDispatcher sharedDispatcher]addTargetedDelegate:self priority:0                            swallowsTouches:YES];
}


@end

私はこれで正しい方向に進んでいますか?現時点では、更新時に「式の結果は使用されていません」と表示されます。誰かが私が欠けているものを教えてもらえますか?どんな助けでも大歓迎です。

ありがとう、パトリック

4

2 に答える 2

1

私はここにいくつかのことを見ます:

  • セレクターがupdateを呼び出すかどうかはわかりません:@selector(update :)
  • dtがちょうど1/60秒であるか、一定であるかに依存しません。速度定数(ポイント/秒)を定義し、各更新サイクルで、目的の速度とdtに基づいてポイントでdeltaXを計算することをお勧めします。
  • 'registerWithTouchDispatcher'呼び出し(onEnterおよびonExitに配置しようとします)メソッドが表示されません。
  • そこのどこかで、必ず子を削除してください(deallocで、またはローカルのクリーンアップ方法でより適切に([スーパークリーンアップ]を呼び出すことを忘れないでください)。
于 2012-01-25T19:26:26.800 に答える
0

更新関数の引数を削除します

于 2012-01-26T00:04:12.350 に答える