物镜c动蛇尾

时间:2015-10-27 12:46:49

标签: ios objective-c

我正在开发一款有两条尾巴的蛇形游戏(玩家与设备)。在我建立网格之后,我开始致力于将尾巴向右移动。我面临的问题是尾巴没有移动。

以下代码正在创建箭头图像(右箭头),以便用户可以单击此箭头向右移动:

self.arrowRight = [[UIImageView alloc] initWithFrame: CGRectMake(90, 39, 27, 27)];
        [_arrowRight setImage:[UIImage imageNamed:@"right-arrow.png"]];
        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(rightTap)];
        [_arrowRight setUserInteractionEnabled:YES];
        [_arrowRight addGestureRecognizer:singleTap];
        [_viewB addSubview:_arrowRight];

-(void)rightTap{
    [self moveRight];
}

以下代码在网格上创建尾部的子视图,其中包含:

x定义为每次向右移动时都会改变的轴

viewA1是尾部的子视图,ViewA是网格的视图

_x=39;
    int l;
    UIView *viewA1;
    for (l=0; l<6; l++) {
        viewA1 = [[UIView alloc]initWithFrame:CGRectMake(_x,48,11,11)];
        viewA1.backgroundColor = [UIColor greenColor];
        [_viewA addSubview:viewA1];
        _x += 12;
    }

以下代码是moveRight方法:

-(IBAction)moveRight {

    _timer = [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(moveRight) userInfo:nil repeats:YES];
    [UIView beginAnimations:@"movingright" context:nil];
    [UIView setAnimationDuration:1];
    _x = 39;
    _vPlayer = [[UIView alloc]initWithFrame:CGRectMake(_x,48,11,11)];
    _vPlayer.backgroundColor = [UIColor greenColor];
    _x += 12;
    [_viewA addSubview:_vPlayer];
    [UIView commitAnimations];
} 

有人可以帮我解决这个问题

由于

2 个答案:

答案 0 :(得分:0)

我认为你不断创造尾巴,永远不会删除它们。跟踪构成尾部的视图,并更新帧或从超级视图中删除它们。

请注意,每次展示您显示的for循环时,都会创建一个新viewA1并将其添加到其他人。直到他们的超级视图是超级视图保持对其子视图的强烈引用时才会发布它们。

答案 1 :(得分:0)

_x是一个值,CGRect是一个结构。他们被复制到assign。所以这样的代码不会起作用:

_x = 39;
_vPlayer = [[UIView alloc]initWithFrame:CGRectMake(_x,48,11,11)];
_x += 12;

您需要创建一个全新的框架才能移动视图:

_vPlayer = [[UIView alloc]initWithFrame:CGRectMake(_x,48,11,11)];
[UIView animateWithDuration:^{ //just a more common way to animate views then beginAnimations/commitAnimations
    CGRect old = _vPlayer.frame;
    _vPlayer.frame = CGRectOffset(old, 12, 0);
    //OR using center property: _vPlayer.center = CGPointMake(_vPlayer.center.x + 12, _vPlayer.center.y)
}];

(另外,我不确定每次按下按钮都需要创建新视图,如果你不想让每一步都增长尾巴。在这种情况下你应该删除_x = 39行和在不重置x坐标的情况下在新位置创建视图。)

我希望它会有所帮助。