Cocos学习日记2
1.cc.direct
解析:
[1]getWinSize获取视图的大小,以点为单位。
[3]getWinSizeInPixels获取视图大小,以像素为单位[这里的像素指的是资源分辨率]。
2.Sprite精灵类
解析:创建精灵类有四种方法,如下所示:
[1]根据图片资源路径创建
var sp1 = new cc.Sprite("res/background.png")
var sp2 = new cc.Sprite("res/tree.png", cc.rect(604, 38, 302, 295))
[2]根据精灵表[纹理图集]中的精灵帧名创建
var sp = new cc.Sprite("#background.png#")
[3]根据精灵帧创建
可以通过精灵帧缓存获得精灵帧对象,再从精灵帧对象中获得精灵对象。如下所示:
var spriteFrame = cc.spriteFrameCache.getSpriteFrame("background.png");
var sprite = new cc.Sprite(spriteFrame)
[4]根据纹理创建精灵
//创建纹理对象
var texture = cc.textureCache.addImage("background.png");
//指定纹理创建精灵
var sp1 = new cc.Sprite(texture);
//指定纹理和裁剪的矩形区域来创建精灵
var sp2 = new cc.Sprite(texture, cc.rect(0,0,480,320));
3.精灵的性能优化
解析:精灵的性能优化可以使用精灵表和缓存。
[1]使用纹理图集
纹理图集也称为精灵表,它是把许多小的精灵图片组合到一张大图里面。使用纹理图集有如下主要优点:
- 减少文件读取次数,读取一张图片比读取一堆小文件要快。
- 减少渲染引擎的绘制调用并且加速渲染。
- Cocos2d-JS全面支持Zwoptex和TexturePacker,所以创建和使用纹理图集是很容易的。
说明:通常可以使用纹理图集制作工具Zwoptex和TexturePacker帮助设计和生成纹理图集文件,以纹理图集坐标文件[plist]。plist是属性列表文件,它是一种XML文件。
[2]使用精灵帧缓存
精灵帧缓存是缓存的一种,缓存有如下几种:
- 纹理缓存:使用纹理缓存可以创建纹理对象。
- 精灵帧缓存:能够从精灵表中创建精灵帧缓存,然后再从精灵帧缓存中获得精灵对象,反复使用精灵对象时,使用精灵帧缓存可以节省内存消耗。
- 动画缓存:动画缓存主要用于精灵动画,精灵动画中的每一帧是从动画缓存中获取的。
精灵帧缓存涉及的类有SpriteFrame和SpriteFrameCache。使用SpriteFrameCache创建精灵对象的主要代码如下所示:
var frameCache = cc.spriteFrameCache;
frameCache.addSpriteFrames("res/SpriteSheet.plist", "res/SpriteSheet.png");
var mountain1 = new cc.Sprite("#mountain1.png")
精灵帧缓存不再使用后要移除相关精灵帧,否则如果再有相同名字的精灵帧时,就会出现一些奇怪的现象。spriteFrameCache类中移除精灵帧的缓存函数如下所示:
- removeSpriteFrameByName(name):指定具体的精灵帧名移除。
- removeSpriteFrames():指定移除精灵缓存。
- removeSpriteFramesFromFile(url):指定具体的坐标文件移除精灵帧。
- removeSpriteFramesFromTexture(texture):通过指定纹理移除精灵帧。
为了防止该场景中的精灵帧缓存对下一个场景产生影响,可以在当前场景所在的层的onExit函数中调用这些函数,如下所示:
onExit:function() {this._super();spriteFrameCache.removeSpriteFrames();
}
onExit函数时层退出时间调的函数,与构造函数类似,都属于层的声明周期中的函数。
4.场景切换相关函数
解析:场景切换是通过导演类director实现的,其中的相关函数如下所示:
[1]runScene(scene):该函数可以运行场景。只能在启动第一个场景时调用该函数。如果已经有一个场景运行,则不能调用该函数。
[2]pushScene(scene):切换到下一个场景。将当前场景挂起放入到场景堆栈中,然后再切换到下一个场景中。
[3]popScene():与pushScene配合使用,可以回到上一个场景。
[4]popToRootScena:与pushScene配合使用,可以回到根场景。
pushScene并不会释放和销毁场景,原来场景的状态可以保持,但是游戏中也不能同时有太多的场景对象运行。使用pushScene函数从当前场景进入到Setting场景的代码如下所示:
cc.director.pushScene(new SettingScene());
从Setting场景回到上一个场景使用的代码如下所示:
cc.director.poopScene();
5.场景过渡动画
解析:场景切换时是可以添加过渡动画的,场景过渡动画是由TransitionScene类和它的子类展示的。TransitionScene类图如下所示:
从类图中可以看到,TransitionScene类的直接子类有11个,而且有些子类还有子类,全部的过渡动画类30多个。不过过渡动画类的使用方式都是类似的,如下所示:
cc.director.pushScene(new cc.TransitionFadeTR(1.0, new SettingScene()));
上述代码创建过渡动画TransitionJumpZoom对象,构造函数有两个参数,第一个是动画持续时间,第二个参数是场景对象。pushScene函数使用的参数是过渡动画TransitionScene对象。如下所示:
[1]TransitionFadeTR:网格过渡动画,从左下到右上。
[2]TransitionJumpZoom:跳动的过渡动画。
[3]TransitionCrossFade:交叉渐变过渡动画。
[4]TransitionMoveInL:从左边推入覆盖的过渡动画。
[5]TransitionShrinkGrow:缩放交替的过渡动画。
[6]TransitionRotoZoom:类似照相机镜头旋转放缩交替的过渡动画。
[7]TransitionSlideInL:从左侧推入的过渡动画。
[8]TransitionSplitCols:按列分割界面的过渡动画。
[9]TransitionSceneOriented:与方向相关的过渡动画,它的子类很多。比如TransitionFlipY是沿垂直方向翻转屏幕。
[10]TransitionTurnOffTiles:生成随机瓦片方格的过渡动画。
6.场景生命周期函数
解析:层的声明周期函数,如下所示:
[1]ctor构造函数:初始化层时调用。
[2]onEnter():进入层时调用。
[3]onEnterTransitionDidFinish():进入层而且过渡动画结束时调用。
[4]onExit():退出层时调用。
[5]onExitTransitionDidStart():退出层而且开始过渡动画时调用。
说明:层[Layer]继承于节点[Node],这些声明周期函数根本上是从Node继承而来。事实上所有Node对象[包括场景、层、精灵等]都有这些函数,只要是继承这些类都可以重写这些函数,来处理这些对象的不同生命周期阶段事件。
7.多场景切换生命周期
解析:在多个场景切换时,场景的声明周期会更加复杂。多个场景切换时分为以下几种情况:
[1]情况1:使用pushScene函数从实现HelloWorld场景进入Setting场景。
[2]情况2:使用popScene函数从实现Setting场景回到HelloWorld场景。
8.动作
解析:动作[cc.Action]包括基本动作和基本动作的组合,基本动作有缩放、移动、旋转等动作,而且这些动作变化的速度也可以设定。动作类图如下所示:
cc.Action的一个子类是cc.FiniteTimeAction,cc.FiniteTimeAction是一种受时间限制的动作,cc.Follow是一种允许精灵跟随另一个精灵的动作,cc.Speed可在一个动作运行时改变其运动效率。此外,cc.FiniteTimeAction有两个子类:cc.ActionInstance和cc.ActionInterval。cc.ActionInstance和cc.ActionInterval是两种不同风格的动作类,cc.ActionInstance封装了一种瞬时动作,cc.ActionInterval封装了一种间隔动作。在cc.Node类中关于动作的函数如下所示:
- runAction(action):运行指定动作,返回值仍然是一个动作对象。
- stopAction(action):停止指定动作。
- stopActionByTag(tag):通过指定标签停止动作。
[1]瞬时动作
瞬时动作就是不等待,立即执行的动作,瞬时动作的基类是cc.ActionInstant。瞬时动作cc.ActionInstant类图如下所示:
[2]间隔动作
间隔动作执行完成需要一定的时间,可以设置duration属性来设置动作的执行时间。间隔动作基类是cc.ActionInterval。间隔动作cc.ActionInterval类图如下所示:
[3]组合动作
动作往往不是单一的,而是复杂的组合。可以按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作。组合动作包括以下几类:顺序、并列、有限次数重复、无限次数重复、反动作和动画。
[4]动作速度控制
基本动作和组合动作实现了针对精灵的各种运动和动画效果的改变。但这样的改变速度是均速的、线性的。通过cc.ActionEase及其子类cc.Speed类可以使精灵以非均速或非线性速度运动,这样看起来效果更加逼真。cc.ActionEase类图如下所示:
[5]回调函数
在顺序动作执行的中间或者结束时,可以回调某个函数,从而可以在该函数中执行任何处理。函数调用类图如下所示:
9.特效
Cocos2d-JS提供了很多特效,这些特效事实上属于间隔动作。特效类cc.GridAction类也称为网格动作,它的类图如下所示:
cc.GridAction有两个主要的子类cc.Grid3DAction和cc.TiledGrid3DAction。cc.Grid3DAction系列的子类中会有瓦片效果。比较这两个效果会看到瓦片效果的特别之处是界面被分割成多个方格。
10.动画
解析:动画分为场景过渡动画和帧动画,帧动画就是按一定时间间隔、一定的顺序、一帧一帧地显示帧图片。美工要为精灵的动作绘制每一帧图片,因此帧动画会由很多帧组成,按照一定的顺序切换这些图片就可以了。在Cocos2d-JS中播放帧动画涉及两个类:cc.Animation和cc.Animate,类图如下所示:
cc.Animation是动画类,它保存有很多动画帧;cc.Animate类是动作类,它继承于cc.ActionInterval类,属于间隔动作类,它的作用是将cc.Animation定义的动画转换成为动作进行执行,这样就看到动画播放的效果了。
11.事件处理机制
解析:Cocos2d-JS游戏引擎具有跨平台特点,能够接收并处理的事件包括触摸事件、键盘事件、鼠标事件、加速度事件和自定义事件等。事件处理机制一般都有三个重要的角色:事件、事件源和事件处理者。
[1]事件
事件类是cc.Event,它的类图如下所示,它的子类有cc.EventTouch[触摸事件]、cc.EventMouse[鼠标事件]、cc.EventCustom[自定义]、cc.EventKeyboard[键盘事件]和cc.EventAcceleration[加速度事件]。
[2]事件源
事件源是Cocos2d-JS中的精灵、层、菜单等节点对象。
[3]事件处理者
Cocos2d-JS中的事件处理者是事件监听器类cc.EventListener,它包括几种不同类型的监听器:
- cc.EventListener.ACCELERATION:加速度事件监听器。
- cc.EventListener.CUSTOM:自定义事件监听器。
- cc.EventListener.KEYBOARD:键盘事件监听器。
- cc.EventListener.MOUSE:鼠标事件监听器。
- cc.EventListener.TOUCH_ALL_AT_ONCE:多点触摸事件监听器。
- cc.EventListener.TOUCH_ONE_BY_ONE:单点触摸事件监听器。
12.事件管理器
解析:Cocos2d-JS提供了一个事件管理器cc.EventManager负责管理这种关系,即事件管理器负责注册监听器、注销监听器和事件分发。cc.EventManager类中注册事件监听器的函数如下所示:
addListener(listener, nodeOrPriority)
其中,第一个参数listener是要注册的事件监听器对象,第二个参数nodeOrPriority可以是一个Node对象或一个数值。如果传入的是Node对象,则按照精灵等Node对象的显示优先级作为事件优先级。
当不再进行事件响应的时候,应该注销事件监听器。主要的注销函数如下所示:
[1]removeListener(listener):注销指定的事件监听器。
[2]removeCustomListeners(customEventName):注销自定义事件监听器。
[3]removeListeners(listenerType, recursive):注销所有特点类型的事件监听器,recursive参数表示是否递归注销。
[4]removeAllEventListeners():注销所有事件监听器,需要注意的是,使用该函数之后,菜单也不能响应事件了,因为它也需要接受触摸事件。
13.触摸事件
解析:
[1]触摸事件的时间方面
触摸事件有两个事件监听:cc.EventListener.TOUCH_ONE_BY_ONE和cc.EventListener.TOUCH_ALL_AT_ONCE,分别对应单点触摸和多点触摸。这些监听器有一些触摸事件响应属性,这些属性对应着触摸事件不同阶段。通过设置这些属性能够实现事件与事件处理者函数的关联。
单点触摸事件的相应属性如下所示:
- onTouchBegan:当一个手指碰触屏幕时回调该属性所指定的函数。如果函数返回值为true,则可以回调后面的两个属性[onTouchMoved和onTouchEnded]所指定的函数,否则不回调。
- onTouchMoved:当一个手指在屏幕移动时回调该属性所指定的函数。
- onTouchEnded:当一个手指离开屏幕时回调该属性所指定的函数。
- onTouchCancelled:当单点触摸事件被取消时回调该属性所指定的函数。
多点触摸事件的响应属性如下所示:
- onTouchesBegan:当多个手指碰触屏幕时回调该属性所指定的函数。
- onTouchesMoved:当多个手指在屏幕上移动时回调该属性所指定的函数。
- onTouchesEnded:当多个手指离开屏幕时回调该属性所指定的函数。
- onTouchesCancelled:当多点触摸事件被取消时回调该属性所指定的函数。
使用这些属性的代码片段演示它们的使用,如下所示:
var listener = cc.EventListener.create({event: cc.EventListener.TOUCH_ONE_BY_ONE,onTouchBegan: function (touch, event) {...return false;}
});
首先需要使用cc.EventListener.create()函数创建事件监听器对象。然后设置它的event属性为cc.EventListener.TOUCH_ONE_BY_ONE,表示为监听单点触摸事件。设置onTouchBegan属性响应手指碰触屏幕阶段动作。
[2]触摸事件的空间方面
空间方面就是每个接触点[cc.Touch]对象包含了当前位置信息,以及之前的位置信息[如果有的话]。下面的函数可以获得接触点之前的位置信息:
{cc.Point} getPreviousLocationInView() //UI坐标
{cc.Point} getPreviousLocation() //OpenGL坐标
下面的函数可以获得接触点当前的位置信息:
{cc.Point} getLocationInView() //UI坐标
{cc.Point} getLocation() //OpenGL坐标
14.键盘事件
解析:Cocos2d-JS中的键盘事件与触摸事件不同,它没有空间方面信息。键盘事件不仅可以响应键盘,还可以响应设备的菜单。键盘事件是EventKeyborad,对应键盘事件监听器[cc.EventListener.KEYBOARD]。键盘事件响应属性如下所示:
[1]onKeyPressed:当键按下时回调该属性所指定的函数。
[2]onKeyReleased:当键抬起时回调该属性所指定的函数。
15.鼠标事件
解析:鼠标事件是EventMouse,对应鼠标事件监听器[cc.EventListener.MOUSE]。鼠标事件响应属性如下所示:
[1]onMouseDown:当鼠标键按下时回调该属性所指定的函数。
[2]onMouseMove:当鼠标键移动时回调该属性所指定的函数。
[3]onMouseUp:当鼠标键抬起时回调该属性所指定的函数。
16.加速度计与加速度事件
解析:加速度计是一种能够感应设备一个方向上线性加速度的传感器,iOS和Android等设备三轴加速度计的坐标系是右手坐标系,即设备竖直向上,正面朝向用户,水平向右为X轴正方向,竖直向上为Y轴正方向,Z轴正方向是从设备指向用户方向。
17.Cocos2d-JS中的音频文件
解析:游戏中音频的处理也是非常重要的,它分为背景音乐播放与音效播放。其中,音效是短的声音,比如单机按钮、发射子弹等声音,它占用内存较小,音效能多个同时播放。音频文件可以分为:
[1]无损格式:非压缩数据格式,文件很大,一般不适合移动设备,比如WAV、AU、APE等文件。
[2]有损个事:对于数据进行了压缩,压缩后丢掉一些数据,比如MP3、WMA[Windows Media Audio]等文件。
说明:Cocos2d-JS对于背景音乐与音效播放在不同平台支持的格式是不同的。
18.使用AudioEngine引擎
解析:在Cocos2d-JS中提供了一个音频引擎-AudioEngine,通过引擎能够很好地控制游戏背景音乐与音效优化播放。cc.AudioEngine有几个常用的函数,如下所示:
[1]playMusic(url, loop):播放背景音乐,参数url是播放文件的路径,参数loop控制是否循环播放,默认情况下为false。
[2]stopMusic():停止播放背景音乐。
[3]pauseMusic():暂停播放背景音乐。
[4]resumeMusic():继续播放背景音乐。
[5]isMusicPlaying():判断背景音乐是否在播放。
[6]playEffect(url, loop):播放音效,参数同playMusic函数。
[7]pauseEffect(audioID):暂停播放音效,参数audioID是playEffect函数返回ID。
[8]pauseAllEffects():暂停所有播放音效。
[9]resumeEffect(audioID):继续播放音效,参数audioID是playEffect函数返回ID。
[10]resumeAllEffects():继续播放所有音效。
[11]stopEffect(auduiID):停止播放音效,参数audioID是playEffect函数返回ID。
[12]stopAllEffects():停止所有播放音效。
19.粒子系统基本概念
解析:粒子系统是模拟自然界中的一些粒子的物理运动的效果,比如烟雾、下雪、下雨、火、爆炸等。单个或几个粒子无法体现出粒子运动规律性,必须有大量的例子才能体现运行的规律。而且大量的例子不断消失,又有大量的粒子不断产生。微观上,粒子运动是随机的、不确定的,而宏观上是有规律的,它们符合物理学中的测不准原理。
[1]粒子发射模式
例子系统发射的时候有两种模式:重力模式和半径模式。重力模式是让例子围绕一个中心点做远离或紧接运动,半径模式是让例子围绕中心点旋转。粒子系统类图如下所示:
[2]粒子系统属性
粒子系统的属性,如下所示:
粒子系统的属性,如下所示:
粒子系统的属性,如下所示:
20.Cocos2d-JS内置粒子系统
解析:Cocos2d-JS中有内置的11种粒子,这些粒子的属性都是预先定义好的,也可以在程序代码中单独修改某些属性。如下所示:
[1]ParticleExplosion:爆炸粒子效果,属于半径模式。
[2]ParticleFire:火焰粒子效果,属于重力和半径模式。
[3]ParticleFireworks:烟花粒子效果,属于重力模式。
[4]ParticleFlower:花粒子效果,属于重力模式。
[5]ParticleGalaxy:星系粒子效果,属于半径模式。
[6]ParticleMeteor:流星粒子效果,属于重力模式。
[7]ParticleSpiral:旋涡粒子效果,属于半径模式。
[8]ParticleSnow:雪粒子效果,属于重力模式。
[9]ParticleSmoke:烟粒子效果,属于重力模式。
[10]ParticleSun:太阳粒子效果,属于重力模式。
[11]ParticleRain:雨粒子效果,属于重力模式。
21.Cocos2d-JS自定义粒子系统
解析:
除了使用Cocos2d-JS的11种内置粒子系统外,还可以通过创建ParticleSystem对象,并设置属性实现自定义粒子系统,同构这种方式完全可以实现所需要的各种效果的粒子系统。使用ParticleSystem自定义粒子系统至少有两种方式可以实现:代码创建和plist文件创建。
代码创建粒子系统需要手工设置这些属性,维护起来非常困难,推荐使用ParticleDesigner等粒子设计工具进行所见即所得的设计,这些工具一般会生成一个描述粒子的属性类表文件plist,然后通过类似下面的语句加载:var particleSystem = new cc.ParticleSystem(“res/snow.plist”);
22.Cocos2d-JS中瓦片地图API
解析:如何设计游戏地图呢?可以使用两种方法:采用一张大图片和采用小纹理图片重复贴图。为了访问瓦片地图,Cocos2d-JS中访问瓦片地图API,主要的类有TMXTiledMap、TMXLayer和TMXObjectGroup等。
[1]TMXTiledMap
TMXTiledMap是瓦片地图类,派生自Node类,具有Node的特性。TMXTiledMap常用函数如下所示:
- new cc.TMXTiledMap(tmxFile):创建瓦片地图对象。
- getLayer(layerName):通过层名获得层对象。
- getObjectGroup(groupName):通过对象层名获得层中对象组集合。
- getObjectGroups():获得对象层中所有对象组集合。
- getProperties():获得层中所有属性。
- getPropertiesForGID(GID):通过GID获得属性。
- getMapSize():获得地图的尺寸,它的单位是瓦片。
- getTileSize():获得瓦片的尺寸,它的单位是像素。
示例代码,如下所示:
var group = _tileMap.getObjectGroup("Objects");
var background = _tileMap.getLayer("Background")
其中,_tileMap是瓦片地图对象。
[2]TMXLayer
TMXLayer是地图层类,它也派生自Node类,也具有Node的特性。同时TMXLayer也派生自SpriteBatchNode类,所有TMXLayer对象具有批量渲染的能力,瓦片地图层就是由大量重复的图片构成的,它们需要渲染提高性能。TMXLayer常用的函数如下所示:
- getLayerName():获得层名。
- getLayerSize():获得层尺寸,它的单位是瓦片。
- getMapTileSize():获得瓦片尺寸,它的单位是像素。
- getPositionAt(pos):通过瓦片坐标获得像素坐标,瓦片坐标y轴方向与像素坐标y轴方向相反。
- getTileGIDAt(pos):通过瓦片坐标获得GID[GID是一个瓦片的全局标识符]值。
[3]TMXObjectGroup
TMXObjectGroup是对象层中的对象组集合。TMXObjectGroup与TMXLayer不同,TMXObjectGroup不是派生自Node,不具有Node的特性。TMXObjectGroup常用的函数如下所示:
- propertyNamed(propertyName):通过属性名获得属性值。
- objectNamed(objectName):通过对象名获得对象信息。
- getProperties():获得对象的属性。
- getObjects():获得所有对象。
23.物理引擎
解析:物理引擎能够模仿真实世界物理运动规律,使得精灵做出自由落体、抛物线运动、互相碰撞、反弹等效果。目前主要使用的物理引擎有Chipmunk和Box2D。在Cocos2d-JS中对Chipmunk引擎进行了封装,对Chipmunk支持很好,无论是Cocos2d-xJSB本地运行还是Cocos2d-html的Web平台运行都没有问题。但是Cocos2d-JS对Box2D支持不是很好,Box2D可以很好地在Cocos2d-html的Web平台上运行,但是不能在Cocos2d-xJSB本地运行。
[1]Chipmunk引擎
Chipmunk核心概念,如下所示:
- 空间[space]:物理空间,所有物体都在这个空间中发生。
- 物体[body]:物理空间中的物体
- 形状[shape]:物体的形状
- 关节[join]:用于连接两个物体的约束
使用Chipmunk物理引擎的一般步骤,如下所示:
[2]Box2D引擎
Box2D物理引擎核心概念主要有:
- 世界[b2World]:引擎中的物理世界。
- 物体[b2Body]:物理世界中的物体。
- 形状[b2Shape]:物体的形状。
- 夹具[b2Fixture]:将形状固定于物体上的装置。有了形状的物体才能具有碰撞等物理特性。
- 关节[b2Join]:引擎中的关节。
使用Box2D物理引擎的一般步骤,如下所示:
24.Cocos2d-JS中的数据持久化
解析:在HTML5中提供了两种持久化数据到本地方法:
[1]localStorage:没有时间限制的数据持久化
[2]sessionStorage:针对一个Web会话的数据持久化
Web会话会过期,不适合Cocos2d-JS,所以也只能使用localStorage实现数据持久化。localStorage是一种采用"键/值"对设计,类似于Cocos2d-x中的UserDefault持久化方式,"键/值"对设计不能保存大量数据,只能保存少量数据。Cocos2d-JS不支持Cocos2d-x中的属性列表和SQLite数据库。
25.localStorage数据持久化
解析:localStorage采用"键/值"对设计,不适合存储关系数据。Cocos2d-JS提供了cc.sys.localStorage类实现localStorage数据持久化,但是与HTML5中的localStorage API还是有区别的。cc.sys.localStorage API的主要函数如下所示:
[1]getItem(key):通过key读取数据
[2]setItem(key, value):通过key保存数据
[3]removeItem(key):通过key删除数据
参考文献:
[1]Cocos2d-x实战:JS卷[第2版]
Cocos学习日记2相关推荐
- Cocos学习日记6
1.Cocos2d-x工程中的library,local,settings文件 解析:临时文件. 2.*.fire文件 解析:在Cocos Creator中,开发者在编辑器中搭建完的场景,所有数据会保 ...
- Cocos学习日记7
1.控制动作 [1]runAction:让一个动作开始. [2]stopAction:停止某一个方法. [3]stopActionByTag:停止动作的执行. [4]stopAllAction:停止全 ...
- java的圆周率_java学习日记,圆周率的打印
前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧. 昨天师傅给我出了一道题,说是试试用java打印圆周率. 刚开始我的思路是,如果 ...
- GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考
GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...
- GPU(CUDA)学习日记(十三)------ CUDA内存简介
GPU(CUDA)学习日记(十三)------ CUDA内存简介 标签: cuda存储线程结构 2012-12-07 16:53 2902人阅读 评论(0)收藏 举报 分类: GPU(16) CUDA ...
- GPU(CUDA)学习日记(九)------ CUDA存储器模型
GPU(CUDA)学习日记(九)------ CUDA存储器模型 标签: cuda存储bindingcache编程api 2012-09-27 10:53 1677人阅读 评论(1) 收藏 举报 分类 ...
- 语言余一个负数_C语言学习日记(8)——整数溢出
小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来.当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了.虽然当时 ...
- SpringMVC学习日记 1.Spring框架
SpringMVC学习日记 1.Spring框架 Spring简介 Spring框架是一个开源框架,由Rod Johnson组织和开发,生产目的在于简化企业级应用的开发. 主要特性 非侵入(no-in ...
- 微信开发学习日记(一):快速阅读5本书,掌握整体背景
2015年1月开始学习微信开发. 已经有多年开发经验了,从网上文章来看,微信开发主要是接口,然后是业务逻辑,不是很难.所以,我比较强调学习效率.一天学一点,是不能满足我的快速学习欲望的. ...
最新文章
- WebView完全解读
- [转]用C#编写ActiveX控件(一)
- 哇、、、、C++ 实现单向链表
- 操作系统学习笔记-06-系统调用
- java url后面带sessionid_Spring Mvc boot解决静态url带jsessionid问题
- 同一个SQL语句,为啥性能差异咋就这么大呢?
- [转载] 羽毛球——学打羽毛球 05 正手发后场高远球练习方法
- java线程中Exchanger使用
- C# USING ADO.NET
- python查看微信撤回消息_Python查看微信好友撤回的消息
- 【工具】IDEA打包jar包
- [翻译] LaTeX Error: Can be used only in preamble
- PowerPoint放映时的动画怎么取消?
- 拼装机器人感想_机器人实验心得体会
- 响应“交通强国”战略,百度地图重构行业生态价值
- C# 使用NPIO在excel指定单元格写内容,合并单元格
- 第三部分 :简单句的补充(限定词/形容词/介词短语)
- lanczos bidiagonalization(1)
- mongoDB使用及简单命令(忘记了密码怎么办、mongoDB密码重置、创建数据库、mongoDB启动停止)
- 什么是市盈率,它和股票价格有什么关系?