0

私は今cocos2dで簡単なゲームを作ってみます私はそのようなものを持っています

#import "GameplayLayer.h"

@implementation GameplayLayer
-(id)init {
    self = [super init];
    if (self != nil) {
        CGSize screenSize = [CCDirector sharedDirector].winSize;
        // właczenie obsługi dotyku
        self.isTouchEnabled = YES;
        if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) {

        }
        else{
            paddle1 = [CCSprite spriteWithFile:@"bijakiPhone.png"];
            paddle2 = [CCSprite spriteWithFile:@"bijakiPhone.png"];
            puck = [CCSprite spriteWithFile:@"krazekiPhone.png"];
        }
        //Polozenie i inicjalizacja paletki nr 1
        [paddle1 setPosition:
         CGPointMake(screenSize.width/2,
                     screenSize.height*0.17f)];
        [self addChild:paddle1];
        //Polozenie i inicjalizacja paletki nr 2
        [paddle2 setPosition:
         CGPointMake(screenSize.width/2,
                     screenSize.height*0.83f)];
        [self addChild:paddle2];
        //Polozenie i inicjalizacja krązka
        [puck setPosition:CGPointMake(screenSize.width/2, screenSize.height/2)];
        [self addChild:puck];
    }
    return self;
}
//onEnter
- (void)onEnter
{
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
    [super onEnter];
}

//onExit
- (void)onExit
{
    [[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
    [super onExit];
}
-(BOOL)containsTouch:(UITouch *)touch {
    CGRect r=[paddle1 textureRect];
    CGPoint p=[paddle1 convertTouchToNodeSpace:touch];
    return CGRectContainsPoint(r, p );
}
-(BOOL)containsTouch2:(UITouch *)touch {
    CGRect r=[paddle2 textureRect];
    CGPoint p=[paddle2 convertTouchToNodeSpace:touch];
    return CGRectContainsPoint(r, p );
}
-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
    if ([self containsTouch:touch]){
       CCLOG(@"krarzek 1 tapniety");
        isTouched1 = YES;
    }


    if ([self containsTouch2:touch]){
        CCLOG(@"krarzek 2 tapniety");
        isTouched2 = YES;
    }

    return YES;
}
-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event{
    if (isTouched1){
        CGPoint newTouchLocation = [touch locationInView:touch.view];
        newTouchLocation = [[CCDirector sharedDirector] convertToGL:newTouchLocation];
        [paddle1 setPosition:newTouchLocation];

    }


    if (isTouched2){
        CGPoint newTouchLocation = [touch locationInView:touch.view];
        newTouchLocation = [[CCDirector sharedDirector] convertToGL:newTouchLocation];
        [paddle2 setPosition:newTouchLocation];
    }

}
-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event{
    if (isTouched1){
        isTouched1=NO;
        CCLOG(@"krarzek 1 zwolniony");
}
    if (isTouched2){
        isTouched2=NO;
        CCLOG(@"krarzek 2 zwolniony");
    }
}
@end

CCSpriteは動きますが、2つのCCSpriteに同時に触れると、重なり合います。それらを別々に移動するにはどうすればよいですか?私の英語をお詫びし、助けてくれてありがとう!

4

1 に答える 1

0

パドルに接続されているタッチをどこかに保存しないという問題の理由。したがって、両方のタッチがパドルスプライト内にある場合、両方の変数isTouched1isTouched2変数の値はになりますYES。したがって、ccTouchMoved:withEvent:この場合、両方のスプライトが同じ位置に配置されます。タッチをいくつかの変数に保存するか、タッチをキーとして、スプライトを値として移動する必要がある辞書を使用することをお勧めします。この場合、ccTouchMoved:withEvent:メソッドは次のようになります。

-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
        CGPoint newTouchLocation = [touch locationInView:touch.view];
        newTouchLocation = [[CCDirector sharedDirector] convertToGL:newTouchLocation];
        CCNode paddle = [_yourDict objectForKey: touch];
        [paddle setPosition:newTouchLocation];
}

また、スプライトに特定のタッチが含まれているかどうかを判断するメソッドの名前は十分ではありません。コードを見ないと、彼らが何をしているのかわかりませんでした。

于 2013-03-25T00:46:09.953 に答える