2012-06-10 3 views
1

나 자신과 내 친구에게 Stackoverflow는 코드와 관련하여 질문 할 곳이라고 말했습니다. :)Cocos2d, 스프라이트를 터치 위치로 이동

우리는 Objective-C, Xcode 및 Cocos2d를 처음 접했고 우리의 지식을 향상시키기 위해 간단한 작업을 완료하려고합니다.

아래의 코드를 살펴보면 Ant 개체를 만들어 화면에 배치했습니다. 우리는 이제 터치 위치를 사용하여 사용자가 터치하는 위치로 개미를 이동하려고합니다.

정확한 방법은 무엇인지 확실하지 않습니다. 현재 우리는 수업을 작성하지 않으므로 모든 코드를 한 곳에 모으고 화면에있는 개미를 터치 위치로 가져 오는 방법을 알 수 없습니다.

아무도 도와 줄 수 있습니까?

// 
// HelloWorldLayer.m 
// Timer 
// 
// Created by Lion User on 06/06/2012. 
// Copyright __MyCompanyName__ 2012. All rights reserved. 
// 


// Import the interfaces 
#import "HelloWorldLayer.h" 

// HelloWorldLayer implementation 
@implementation HelloWorldLayer 

+(CCScene *) scene 
{ 
    // 'scene' is an autorelease object. 
    CCScene *scene = [CCScene node]; 

    // 'layer' is an autorelease object. 
    HelloWorldLayer *layer = [HelloWorldLayer node]; 

    // add layer as a child to scene 
    [scene addChild: layer]; 

    // return the scene 
    return scene; 
} 



// on "init" you need to initialize your instance 
-(id) init 
{ 
    if((self=[super initWithColor:ccc4(225, 225, 225, 255)])) { 

     // enable touches 
     self.isTouchEnabled=YES; 

     // ask director the the window size 
     CGSize size = [[CCDirector sharedDirector] winSize]; 


     // set time to zero 
     myTime = currentTime; 
     timeLabel = [CCLabelTTF labelWithString:@"00:00" fontName:@"Arial" fontSize:48]; 
     timeLabel.position = CGPointMake(size.width/2, size.height); 
     // set label color 
     timeLabel.color = ccBLACK; 
     // Adjust the label's anchorPoint's y position to make it align with the top. 
     timeLabel.anchorPoint = CGPointMake(0.5f, 1.0f); 
     // Add the time label 
     [self addChild:timeLabel]; 

     // run create ant method 
     [self createAnt]; 

     //update 
     [self schedule:@selector(update:)]; 

    } 
    return self; 
} 

-(void)update:(ccTime)dt{ 

    totalTime += dt; 
    currentTime = (int)totalTime; 
    if (myTime < currentTime) 
    { 
     myTime = currentTime; 
     [timeLabel setString:[NSString stringWithFormat:@"%02d:%02d", myTime/60, myTime%60]]; 
    } 

} 

////* method for creating an ant and moving it*//// 
-(void)createAnt{ 

    ////*requirements for animation setup*//// 

    // create cache object to store spritesheet in 
    CCSpriteFrameCache *cache=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    // add the sprite list to the cache object 
    [cache addSpriteFramesWithFile:@"antatlas.plist"]; 
    // create frame array to store the frames in 
    NSMutableArray *framesArray=[NSMutableArray array]; 

    //loop through each frame 
    for (int i=1; i<3; i++){ 
     // increment the name to include all frames in sprite sheet 
     NSString *frameName=[NSString stringWithFormat:@"ant%d.png", i]; 
     // create frame object set it to the cache object and add the frameNames to the cache 
     id frameObject=[cache spriteFrameByName:frameName]; 
     // add the frame object into the array 
     [framesArray addObject:frameObject]; 

    } 

    ////* setup the actions for running the animation*//// 

    // create animation object and pass the list of frames to it (it expects this as an array) 
    id animObject=[CCAnimation animationWithFrames:framesArray delay:0.05]; 
    // setup action to run the animation do not return to frame 1 
    id animationAction=[CCAnimate actionWithAnimation:animObject restoreOriginalFrame:NO]; 
    //loop the animation indefinitely 
    animationAction = [CCRepeatForever actionWithAction:animationAction]; 
    // move ant action 
    id moveAnt=[CCMoveTo actionWithDuration:3 position:ccp(60, 160)]; 

    // create sprite, set location and add to layer (starts with the name of the first frame in the animation 
    CCSprite *ant=[CCSprite spriteWithSpriteFrameName:@"ant1.png"]; 
    ant.position=ccp(240, 160); 
    [self addChild:ant]; 


    //run animation action 
    [ant runAction: animationAction]; 
    // run move ant action 
    [ant runAction:moveAnt]; 

} 

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch=[touches anyObject]; 
    CGPoint loc=[touch locationInView:[touch view]]; 
    loc=[[CCDirector sharedDirector]convertToGL:loc]; 
    NSLog(@"touch (%g,%g)",loc.x,loc.y); 

    // Move ant to point that was pressed 
    [ant runAction:[CCSequence actions: 
    [CCMoveTo actionWithDuration:realMoveDuration position:loc], 
    [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)], 
    nil]]; 
} 


// on "dealloc" you need to release all your retained objects 
- (void) dealloc 
{ 

    [super dealloc]; 
} 
@end 

답변

2

개미와 같이 보이는 부분은 createAnt 메소드에 국한됩니다. 그래서 touchesBegan 문은 개미를 "보지"않습니다. 헤더 파일로 가서 @interface에서 앤트를 선언하십시오.

CCSprite * ant; 그런 다음 다시 createAnt 문에

, 당신은 그냥 쓸 수

개미 = [CCSprite spriteWithSpriteFrameName "ant1.png"@]

지금 구현 (하는 .m) 파일의 다른 방법을 사용하면

는 희망이 도움 "개미"를 쓸 때 당신은 무엇을 의미 알게 될 것이다!

+0

유효한 대답이라고 생각합니다. +1 –

관련 문제