我正在 Cocos2d 中构建游戏,但我很难实现我想要的。想象一个 8 x 10 的正方形网格。您可以触摸一个正方形并水平/垂直拖动该正方形的行/列,但不能同时拖动。释放行/列后,方块将根据它们最接近的行/列位置“捕捉”回网格中的位置。
一切都以编程方式工作,没有重叠或错位的方块或无效的位置。但是,我似乎无法让这种“对齐网格”以我想要的方式制作动画。
我正在使用 MVC 设计模式将任何视图与任何游戏逻辑分开。视图只是简单地传递了一个“squaresToUpdate”数组,查看每个正方形,找到相应的精灵,并根据正方形的位置更新精灵的位置。
尝试按照以下方式执行某些操作时会出现问题:
-update():
for each square in squaresToUpdate:
if square is not being dragged at the moment:
setup a 'CCMoveTo' to bring the sprite in line with square
我不能让方块在被拖动时自由移动,但在不被拖动时CCMoveTo。要么我每次更新都创建一个新动作,要么方块就吓坏了。
我不知道是不是我的逻辑被打破了,如果 CCMoveTo 没有做我想要的,或者这个问题实际上是否比我最初想象的要困难得多。有人可以帮我解决这个逻辑吗?
好的旧铅笔和纸给了我这个,但我不确定它是 100%:
- (void)update:(ccTime)dt {
NSMutableArray *toDraw = [self.rootView whatAmIDrawing];
for (GameObject *o in toDraw) {
CCSprite *sprite = (CCSprite*)[self.batch getChildByTag:o.tag];
if (o.moving == NO) {
if (o.snapping == NO) {
o.snapping = YES;
CCMoveTo *move = [CCMoveTo actionWithDuration:self.rootView.model.activeGame.snapSpeed position:o.position];
[sprite runAction:move];
}
} else {
o.snapping = NO;
sprite.position = o.position;
sprite.rotation = o.rotation;
}
}
[super update:dt];
}