gpt4 book ai didi

iphone - COCOS2D : ScrollView inside a CCScene blocks animation

转载 作者:行者123 更新时间:2023-11-29 13:44:13 24 4
gpt4 key购买 nike

我有一个 CCScene。在它的右侧,我需要有一个带有一些菜单元素的 UIScrollView。正如我在上一个问题 Cocos2d and UIScrollView 中解释的那样,我是这样做的

这是创建场景的方法

  +(id) scene: (int) wld{
CCScene *scene = [CCScene node];
LevelsMenu *layer = [LevelsMenu node];
layer = [layer init:wld];
[scene addChild: layer];
[layer setScrollView:[LevelMenuControlView alloc]];
[[[CCDirector sharedDirector] openGLView] addSubview:layer.scrollView.view];
return scene;
}

请注意 LevelMenuControlView 只是一个以这种方式实现的 UIViewController:

 - (void)loadView{
LevelMenuView *scrollView = [[LevelMenuView alloc] initWithFrame:[UIScreen
mainScreen].applicationFrame];

scrollView.contentSize = CGSizeMake(862, 480);

scrollView.delegate = scrollView;
[scrollView setUserInteractionEnabled:TRUE];
[scrollView setScrollEnabled:TRUE];
[scrollView setShowsVerticalScrollIndicator:FALSE];
[scrollView setShowsHorizontalScrollIndicator:FALSE];
self.view = scrollView;

[scrollView release];
}

而LevelMenuView是包含菜单元素的UIScrollView

它工作得很好。现在的问题是,在场景的左侧,我有一个 Sprite 动画,如果我没有很好地触摸屏幕,但是一旦我向上或向下拖动 ScrollView 就会停止或以与滚动手指相同的速度移动!!!

有什么想法吗?

最佳答案

我发现这个链接已经有人遇到过同样的问题并发布了一个实际有效的解决方案

http://www.cocos2d-iphone.org/forum/topic/11645

它基本上包括将此代码添加到 ScrollView :

// This should go in your interface.
NSTimer *timer;

// Override
- (void)setContentOffset:(CGPoint)contentOffset {
// UIScrollView uses UITrackingRunLoopMode.
// NSLog([[NSRunLoop currentRunLoop] currentMode]);

// If we're dragging, mainLoop is going to freeze.
if (self.dragging && !self.decelerating) {

// Make sure we haven't already created our timer.
if (timer == nil) {

// Schedule a new UITrackingRunLoopModes timer, to fill in for
CCDirector while we drag.
timer = [NSTimer scheduledTimerWithTimeInterval:[[CCDirector sharedDirector] animationInterval] target:self selector:@selector(animateWhileDragging) userInfo:nil repeats:YES];

// This could also be NSRunLoopCommonModes
[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopModes];
}
}

// If we're decelerating, mainLoop is going to stutter.
if (self.decelerating && !self.dragging) {

// Make sure we haven't already created our timer.
if (timer == nil) {

// Schedule a new UITrackingRunLoopMode timer, to fill in for CCDirector while we decellerate.
timer = [NSTimer scheduledTimerWithTimeInterval:[[CCDirector sharedDirector] animationInterval] target:self selector:@selector(animateWhileDecellerating) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];
}
}

[super setContentOffset:contentOffset];
}
- (void)animateWhileDragging {

// Draw.
[[CCDirector sharedDirector] drawScene];

if (!self.dragging) {

// Don't need this timer anymore.
[timer invalidate];
timer = nil;
}
}
- (void)animateWhileDecellerating {

// Draw.
[[CCDirector sharedDirector] drawScene];

if (!self.decelerating) {

// Don't need this timer anymore.
[timer invalidate];
timer = nil;
}
}

非常感谢这些人

关于iphone - COCOS2D : ScrollView inside a CCScene blocks animation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com