2

ボタンをクリックしてクラスタイルの値を設定したい

  • onPlus をクリックすると、文字列値 = @"+" になります。
  • onMinus をクリックすると、文字列値 = @"-" になります。

ここにコードがあります

//Class Tile

@interface Tile : TouchableNode {
     NSString *val;
}

-(void) setVal:(NSString *)v
{
    val = v;
}

-(NSString *) getVal
{
    return val;
}

そして、別のクラスで

私はこのようなコードを持っています

for(Tile *tile in player)
{
    if (tile.getVal == @"P") {
        if (pauseStatus == 0) {
            pauseStatus = 1;

            [[CCDirector sharedDirector] pause];
            CGSize size = [[CCDirector sharedDirector] winSize];
            pauseLayer=[[CCLayer alloc] init];
            pauseLayer.anchorPoint=ccp(0,0);
            pauseLayer = [CCLayerColor layerWithColor: ccc4(0, 0, 255, 125) width: 300 height: 150];
            pauseLayer.position = ccp(size.width/2, size.height/2);       
            pauseLayer.isRelativeAnchorPoint = YES;
            [self addChild: pauseLayer z:8];

            //Here are 2 two button that when user click it will have @"+" value or @"-"
            plusBtn = [CCMenuItemImage itemFromNormalImage:@"plus.png" selectedImage:@"plus.png"     target:self selector:@selector(onPlus:)];
            minusBTn = [CCMenuItemImage itemFromNormalImage:@"minus.png" selectedImage:@"minus.png"      target:self selector:@selector(onMinus:)];

            pauseMenu = [CCMenu menuWithItems:plusBtn, minusBTn, nil];
            [pauseMenu alignItemsHorizontally];
            [self addChild:pauseMenu z:10];
        }
    }
}

オブジェクトタイルをそのメソッドに送信したい onPlus & onMinus メソッドがあります

-(void)onPlus:(Tile *) set
{
    NSString *plus = @"+";
    [set setVal:plus];
}

-(void)onMinus:(Tile *) set
{
    NSString *minus = @"-";
    [set setVal:minus];
}

オブジェクトタイルをメソッドに渡す方法?? それとも別の作り方??

4

3 に答える 3

0

Tileオブジェクトをハンドラーに送信する場合はonPlus、CCMenuItemImageをサブクラス化して、Tileプロパティを作成します。

@interface MyCustomCCMenuItemImage : CustomCCMenuItemImage
@property (nonatomic, retain) Tile* tile;
@end

コードがどのように見えるかの大まかな例を次に示します。

- (void)someMethod
{

    for(Tile *tile in player)
    {
        plusBtn = [MyCustomCCMenuItemImage itemFromNormalImage:@"plus.png"   selectedImage:@"plus.png" target:self selector:@selector(onPlus:)];
        plusBtn.tile = tile ;
    }

}

//Your handler
-(void)onPlus:(id)sender
{
    Tile *myTile = sender.tile;
}
于 2012-01-05T15:47:10.340 に答える
0

文字列比較の場合は、次を使用することをお勧めします

[tile.getVal isEqualToString:@"P"]

使用するメソッドは、他の場所の同等の文字列とは対照的に、(同じメモリ位置にある) まったく同じ文字列である場合にのみ機能するためです。

于 2012-01-05T15:53:52.257 に答える
0

CCMenuItemImageCCNodeプロパティを持つから継承しvoid* userDataます。に割り当てるtileと、/メソッドuserDataの から取得できます。(id)senderonPlusonMinus

plusBtn = [CCMenuItemImage itemFromNormalImage:@"plus.png" selectedImage:@"plus.png"     target:self selector:@selector(onPlus:)];
plusBtn.userData = (void*)tile; // You may need a bridge cast in ARC
minusBTn = [CCMenuItemImage itemFromNormalImage:@"minus.png" selectedImage:@"minus.png"      target:self selector:@selector(onMinus:)];
minusBTn.userData = (void*)tile;

-(void)onPlus:(id)senderObj {
    CCNode *sender = (CCNode*)senderObj;
    Tile *myTile = (Tile*)sender.userData; // Again you may need a bridge cast here
}
于 2012-01-05T15:50:24.083 に答える