转:[iphone-cocos2d]关于Loading的若干处理和讨论
(
id) init
{
self = [
super init];
if (
self )
{
// Add the Label (in cocos2D universe)
BitmapFontAtlas *label = [
BitmapFontAtlas bitmapFontAtlasWithString:
@"Initializing Game" fntFile:
@"comic_atlas.fnt" alignment:
UITextAlignmentCenter];
label.
position =
*****(
240,
160);
label.
opacity =
0;
[
self addChild: label
z:
0 tag: kInitializingLabel];
// Add the UIActivityIndicatorView (in UIKit universe)
self.activityIndicatorView = [[[UIActivityIndicatorViewalloc
] initWithActivityIndicatorStyle
: UIActivityIndicatorViewStyleWhiteLarge
] autorelease
]; activityIndicatorView.
center =
*****(
190,
240);
[activityIndicatorView
startAnimating];
[[
self battleView]
addSubview: activityIndicatorView];
[
self schedule:
@selector(loadingInit)];
// At this point, the cocos2d rendering is fine.
}
return
self
;}
- (
void) loadingInit
{
[
self unschedule:
@selector(loadingInit)];
// Fade in nicely
BitmapFontAtlas *label = (
BitmapFontAtlas*)[
self getChildByTag: kInitializingLabel];
[label runAction
: [FadeInactionWithDuration
: .25]]; [
self schedule:
@selector(loadingStep0)
interval:
.25];
}
- (
void) loadingStep0
{
[
self unschedule:
@selector(loadingStep0)];
// Add you own code to load texture, sounds etc...
// The cocos2D thread will be waiting (since it"s the same as
the main thread) but the UIKit thread will keep running in parallel
// Can do multiple steps or just one
[
self schedule:
@selector(loadingStep1)
interval:
.5];
}
- (
void) loadingStep1
{
[
self unschedule:
@selector(loadingStep1)];
// Add you own code to load texture, sounds etc...
[
self schedule:
@selector(loadingDone)
interval:
.1];
}
- (
void) loadingDone
{
gameIsReady =
YES;
[
self.activityIndicatorView
removeFromSuperview];
BitmapFontAtlas *label = (
BitmapFontAtlas*)[
self getChildByTag: kInitializingLabel];
[label
setString:
NSLocalizedString(
@"Tap to start!",
nil)];
[label runAction
: [RepeatForeveractionWithAction
: [SequenceactionOne
: [EaseInOutactionWithAction
: [MoveToactionWithDuration
: .6position
: *****(210, 160)] rate
: 2] two: [EaseInOut actionWithAction: [MoveTo actionWithDuration: .6 position: *****(270, 160)] rate: 2] ] ]];
}
- (
BOOL)ccTouchesEnded:(
NSSet *)touches withEvent:(
UIEvent *)event
{
if ( gameIsReady )
{
[
self openGame];
}
returnkEventHandled
;}
2。
CGRect texRect = CGRectMake( (barPngWidth/2)*(1-loadPercentage), 0, barPngWidth/2, barPngHeight);
[barAtlasSprite setTextureRect:textRect];
My loadPercentage var should be comprised between 0 and 1.
You definitely don"t have to use an animation nor the setDisplayFrame function.
3。
http://stackoverflow.com/questions/1133123/multi-threaded-opengl-programming-in-cocos2d-iphone[/pre]