Cocos2dx 3d open-source project fantasyWarrior3D starts from scratch [LoadingScene & MainMenuScene] And cocos2dx open-source games
[AppDelegate. cpp]
Start with applicationDidFinishLaunching ().
It is found that there is an additional method to encrypt the script.
(1) stack-> setXXTEAKeyAndSign ("2 dxLua", strlen ("2 dxLua"), "XXTEA", strlen ("XXTEA "));
(2) Use config. json configuration to find the main. lua entry of lua and execute it. Then jump to the first interface LoadingScene.
Engine-> executeScriptFile (ConfigParser: getInstance ()-> getEntryFile (). c_str ());
[LoadingScene]
1. Construction Sequence of LoadingScene: (1) LoadingScene: create () is called externally
(2) In create, execute LoadingScene: new (). The following definition takes effect.
Initialize yourself as a scene:
Local MainMenuScene = class ("MainMenuScene", function ()
Return cc. Scene: create ()
End
)
(3) ctor ()
Because the class method defined by cocos2dx-lua function. lua is used, the constructor () of the subclass is called by default ()
(4) Call LoadingScene: init () at the end of create to complete initialization of other sub-objects
2. In init (), a scheduler is enabled to execute update to update the sub-object status. cc. ctor: getInstance (): getScheduler (): scheduleScriptFunc (update, 0.1, false)
What has update done:
(1) cache a particle and material every 0.1 seconds
LoadingScene: cachedparticipant leres ()
LoadingScene: cachedTextureRes ()
(2) Adjust the position of the progress bar loadingbar: setPercent (self. _ totalResource-self. _ num)/self. _ totalResource * 100)
(3) jump if loading is completed
Local scene = require ("MainMenuScene ")
Cc. Director: getInstance (): replaceScene (scene: create ())
[MainMenuScene]
// Static function, used to set the default Paster pixel format with ALPHA channel. When an image is created as a texture, if there is an ALPHA channel, the default texture pixel format is generated.
Static void setDefaultAlphaPixelFormat (CCTexture2DPixelFormat format );
1. addCloud add cloud (1) Enable a mobile cloud scheduler at a frequency of 60 times per second
Self. scheduleCloudMove = cc. Director: getInstance (): getScheduler (): scheduleScriptFunc (cloud_move, 1/60, false)
2. addlogo swing back and forth implementation local function logoShake ()
-- Rand_n = range * math. sin (math. rad (time * speed + offset ))
Local rand_x = 0.1 * math. sin (math. rad (time * 0.5 + 4356 ))
Local rand_y = 0.1 * math. sin (math. rad (time * 0.37 + 5436 ))
Local rand_z = 0.1 * math. sin (math. rad (time * 0.2 + 54325 ))
Logo: setRotation3D ({x = math. deg (rand_x), y = math. deg (rand_y), z = math. deg (rand_z )})
Time = time + 1
End
Self. logoSchedule = cc. Director: getInstance (): getScheduler (): scheduleScriptFunc (logoShake, 0, false)
In fact, this code can be viewed
Local rand_x = 0.1 * math. sin (math. rad (time ))
Local rand_y = 0.1 * math. sin (math. rad (time ))
Local rand_z = 0.1 * math. sin (math. rad (time ))
Use math. rad to limit the time To a radian of less than 360, and then use math. sin to convert it to an interval value [-x, x].
In the end, * 0.1 reduces the swing amplitude, so that an x, y, and Z-axis swing is realized.
In this case, we set the value in cocosIDE and found that the border effect suddenly disappeared. The "View" function is still a little bug.
3. addPointLight the guy with wings (1) getLightSprite () used to construct the body and use alpha to mix the color to achieve translucent effect of the wings and other parts
Self. _ lightSprite: setBlendFunc (gl. ONE, gl. ONE_MINUS_SRC_ALPHA)
GL_ONE: 1.0
GL_ONE_MINUS_SRC_ALPHA: 1.0 minus the source Alpha value as a factor
Reference http://cn.cocos2d-x.org/tutorial/show? Id = 1739
(2) normal texture to achieve concave and convex Effects
Local variables tnormalmapped = cc. effectNormalMapped: create ("mainmenuscene/logo_normal.png ");
Extends tnormalmapped: setPointLight (self. _ pointLight)
Extends tnormalmapped: setKBump (50) Is this set the concave and convex value?
(3) circular motion and drag
OnTouchBegin records the current position and opens the mobile processing function movePoint.
OnTouchEnded: Turn off the mobile processing function and call getBezierAction () to start the circular motion again"
MovePoint:
It is worth noting that the lerp function is used to obtain interpolation to achieve a moving Effect of deceleration and acceleration.
MovePoint function: local point = cc. pLerp (lightSpritePos, self. _ prePosition, dt * 2)