cocos creator官网见缝插针源码游戏结束的代码逻辑

如何评价 Cocos2d-x 的新编辑器 Cocos Creator_百度知道
如何评价 Cocos2d-x 的新编辑器 Cocos Creator
我有更好的答案
因为之前编辑器都是用的cocos studio,发现配合使用起来还是很麻烦的,要么就是直接代码布局,不是所见即所得坐标来回调很麻烦。但是现在creator集成界面和脚本等工具,所以使用起来还是很方便的。美术可以直接在creator里面布局好,然后程序员直接加功能代码就可以了,不用像之前程序员看效果图然后自己再布局。而且这个开发模式有点像u3d,所以会了creator后再转u3d的话会容易一些。当然如果习惯了之前那种cocos2d-js或lua那种开发,一开始学习这个感觉还是有很多不适应的地方。
采纳率:53%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Pages: 1/2
主题 : 一天写一个小游戏,这就是quick的效率,下面我会把实现的代码分3次贴出来哦!
级别: 新手上路
可可豆: 84 CB
威望: 74 点
在线时间: 6(时)
发自: Web Page
来源于&&分类
一天写一个小游戏,这就是quick的效率,下面我会把实现的代码分3次贴出来哦!&&&
本帖被 微微蓝 执行加亮操作()
先介绍一下这个小游戏,已经上线app store  名字:见缝插针  英文名字:aazz玩法介绍可以下载看看哦1,逻辑实现主场景的 ctor 方法fun MainScene:ctor(levelIndex) --每次进入场景的时候把使用的参数  都重置一下 --为什么要重置,好像不重置的时候   切换场景快一点  会有一些  小bug self:c_clean() --   失败的文字   开始不显示 self.failLabel = ui.newBMFontLabel({            text  = &Failed!&,            font = &white.fnt&,            x     = display.cx,            y     = display.cy,            align = ui.TEXT_ALIGEN_CENTER,        })    self:addChild(self.failLabel, 6)    self.failLabel:setColor(ccc3(252,129, 131))    self.failLabel:setScale(0.7)    self.failLabel:setOpacity(0)    --  进入游戏  显示title  第几关 self.titleLabel = ui.newBMFontLabel({            text  = &Level &..levelIndex,            font = &blue.fnt&,            x     = display.cx,            y     = display.top + 50,            align = ui.TEXT_ALIGEN_CENTER,        })    self:addChild(self.titleLabel, 6)    self.titleLabel:setVisible(false)    -- title  稍后做了个简单动画    self:performWithDelay(function()   &&self.titleLabel:setVisible(true)   &&local seq = transition.sequence({ CCMoveBy:create(0.1,ccp(0,-120)), CCMoveBy:create(0.2,ccp(0,20)) }) self.titleLabel:runAction(seq)    end,1.0)     --  这个是获取某一关的数据   1000关+ 都配置在Levels.lua文件里面  以下是第一关配置的数据  有详细解释哦    -- [1]={    --     --=1,--关卡--     --     speed1=0.8,--初始角速度     --     speed2=0.8,--变速后角速度(如果不变填写相同的)     --     time=0,--变速时间周期(单位秒,填写0表示不变速)     --     startNumber=3,--默认小球数量(夹角 = 360/数量)     --     myNumber=3,--目标小球数量     -- }, self.peizhiData = Levels.get(levelIndex) sudu = self.peizhiData.speed1 sudu2 = self.peizhiData.speed2 time = self.peizhiData.time * 60 startNumberLevel = self.peizhiData.startNumber myLevelNumber = self.peizhiData.myNumber --真正的  角速度    self.realSudu = sudu --计时间 self.jishiTime = 0 -- 场景内加入一个 自定义颜色的layer    display.newColorLayer(ccc4(255, 250, 215, 255)):addTo(self)    --定义一个层  所有的 自由转动都在这个层上    self.contentLayer = display.newLayer()    self.contentLayer:setPosition(ccp(0,100))    self:addChild(self.contentLayer,2)    --再定一个层  这个层放置所有  还没有插入的球  每插入一个  向上移动一点    self.contentLayer2 = display.newLayer()    self:addChild(self.contentLayer2,1)    self.contentLayer2:setPosition(ccp(0,100))    --定义一个半透明的 背景层    self.bgLayer = display.newColorLayer(ccc4(255, 250, 215, 210)):addTo(self,5)    self.bgLayer:setVisible(false)    --self.tableArray  保存转动中的球    self.tableArray = {}    --保存 没有插进去的球    self.ballDown = {}     --添加 资源    self:addResours()    --当前  layer  角度    self.angleDu = 0.0    --  注册触摸事件    self.contentLayer:setTouchMode(cc.TOUCH_MODE_ONE_BY_ONE)   self.contentLayer:addNodeEventListener(cc.NODE_TOUCH_EVENT, function(event)        return self:onTouch(event.name, event.x,event.y)    end) self.contentLayer:setTouchEnabled(true)    -- 注册帧事件  注册之后一定要 启用 才生效    self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT, function(dt)         return self:updateMy()    end)    --开启 update 每1/60 s 执行一次self:updateMy()    self:scheduleUpdate()    self.gameOver = false--下面是   静态布局  fun MainScene:addResours() --中间的  大圆球 self.circleAll = display.newSprite(&circle.png&) self.circleAll:setPosition(ccp(display.cx,display.cy)) self.contentLayer:addChild(self.circleAll,2)
--中间的现实 当前还剩余多少个球没有插进去 self.nowNumberLabel = ui.newBMFontLabel({            text  = myLevelNumber,            font = &white.fnt&,            x     = display.cx,            y     = display.cy + 100,            align = ui.TEXT_ALIGEN_CENTER,        })    self:addChild(self.nowNumberLabel, 3)    -- 预先放置 配置好的球    -- 比如一开始  配置  就有5个球插上了  那么计算出他们各自的位置 for i=1,startNumberLevel do --r 是小球的半径 local xx = math.sin(math.rad((i - 1) * 360 / startNumberLevel)) * r   &&local yy = math.cos(math.rad((i - 1) * 360 / startNumberLevel)) * r   &&-- 这个是打球和小球之间连接的那条线 也是一个精灵   &&local sp0 = display.newSprite(&steak.png&)   &&--计算出位置 sp0:setPosition(ccp(display.cx + xx * 4 /3,display.cy + yy * 4 /3)) --计算出 角度 sp0:setRotation((i - 1) * 360 / startNumberLevel) self.contentLayer:addChild(sp0,1) --小球 local ball1 = display.newSprite(&lCircle.png&) ball1:setPosition(ccp(display.cx + xx * 2,display.cy + yy * 2)) self.contentLayer:addChild(ball1,2)
--把它们 全放入table self.tableArray[#self.tableArray + 1] = ball1 end --在下面依次排列所有的 未插入的小球 for i=1,myLevelNumber do local balldd = display.newSprite(&lCircle.png&) balldd:setPosition(ccp(display.cx,display.cy - r * 2 - (myLevelNumber + 1 - i) * rLittleBall * 3.0)) self.contentLayer2:addChild(balldd,3)
balldd.number = i --小球上的  数字 local setLabel = ui.newBMFontLabel({            text  = i,            font = &white.fnt&,            x     = balldd:getContentSize().width/2,            y     = balldd:getContentSize().height/2,            align = ui.TEXT_ALIGEN_CENTER,        })        setLabel:setScale(0.36)   &&balldd:addChild(setLabel, 2)   &&--保存所有未插入的小球 self.ballDown[#self.ballDown + 1] = balldd end --英文不好   见谅啊。    虚线就是红色那个虚线  半透明 local xuxian = display.newSprite(&xuxian.png&,display.cx,display.cy - r - rLittleBall * 3.0) xuxian:setAnchorPoint(ccp(0.5, 0)) xuxian:setOpacity(100) self:addChild(xuxian,1) --失败后 隐藏的按钮&&self.backMenu = cc.ui.UIPushButton.new(&menu.png&, {scale9 = false})        :onButtonPressed(function(event)            event.target:setScale(1.1)        end)        :onButtonRelease(function(event)            event.target:setScale(1.0)        end)        :onButtonClicked(function(event)            app:playSound(GAME_SFX.button)            self:donghuaXiaoshi()            self:performWithDelay(function()           &&app:goMenuScene()            end,1.0)        end)        :pos(-display.cx * 3, display.cy  - 200)        :addTo(self,6)        --重新开始的按钮    self.refreshMenu = cc.ui.UIPushButton.new(&refresh.png&, {scale9 = false})        :onButtonPressed(function(event)            event.target:setScale(1.1)        end)        :onButtonRelease(function(event)            event.target:setScale(1.0)        end)        :onButtonClicked(function(event)            app:playSound(GAME_SFX.button)            self:donghuaXiaoshi()            self:performWithDelay(function()           &&app:goGameScene()            end,1.0)        end)        :pos(display.cx * 3, display.cy  - 200)        :addTo(self,6)这样的话  整个游戏界面  是出来了。
描述:游戏内的界面
图片:战斗效果.png
描述:menu 界面
图片:开机效果.png
描述:失败后的界面
图片:失败效果.png
图片:Icon-72.png
本帖最近评分记录: 共1条评分记录
原创内容 加油
级别: 圣骑士
可可豆: 843 CB
威望: 888 点
在线时间: 1338(时)
发自: Web Page
放在github上或者git@osc更好一些啊
级别: 骑士
UID: 316527
可可豆: 692 CB
威望: 558 点
在线时间: 353(时)
发自: Web Page
不错,加油啊,多分享点
级别: 骑士
可可豆: 485 CB
威望: 480 点
在线时间: 430(时)
发自: Web Page
级别: 新手上路
可可豆: 130 CB
威望: 130 点
在线时间: 97(时)
发自: Web Page
看起来不错啊!
级别: 新手上路
UID: 430592
可可豆: 56 CB
威望: 20 点
在线时间: 12(时)
发自: Web Page
支持,分享!挺好的!
级别: 新手上路
UID: 157922
可可豆: 57 CB
威望: 56 点
在线时间: 422(时)
发自: Web Page
81关,第四名了
级别: 侠客
可可豆: 318 CB
威望: 318 点
在线时间: 557(时)
发自: Web Page
花了多久? 山寨 aa的把?
级别: 骑士
UID: 180504
可可豆: 3161 CB
威望: 2037 点
在线时间: 763(时)
发自: Web Page
创意挺好的
级别: 新手上路
UID: 368352
可可豆: 62 CB
威望: 52 点
在线时间: 246(时)
发自: Web Page
山寨aa啊 还叫aazz
Pages: 1/2
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版08:53:16 UTC
大哥大嫂新年好,小菜鸡想求个源码,望大哥大嫂帮个忙,在下感激不尽,好人一生平安1-5 见缝插针
任务1:资源下载
任务2:案例演示
任务3:创建工程和场景
Project Name:StickPin
import素材,为两张png图
创建各个分类文件夹Scenes/ Prefabs/ Scripts
修改Main Camera的Clear Flags为Solid Color  Background颜色到小清新的卡其色
任务4:创建小球和分数显示
2D游戏 -- 勾选Scene上的2D标识
创建小球:
将Image里的Circle拖入Hierarchy面板调整位置到中偏上,scale为0.7颜色为黑
UI-&Text 用于显示分数删除自动创建的EventSystem,因为不需要用到事件Text居中(reset Rect Transform即可)文字水平居中竖直居中,字体白色,大小变大
Canvas的渲染模式Render Mode改为World Space  这样就可以将UI缩小到和游戏开发环境一样,便于设计大小Canvas的Event Camera选择为Main Camera;共用同一个Camera即可Canvas的大小设置为100*100(因为Text的是100*100)  但是Canvas和Circle比较还是很大,-& scale 0.01 (之前是1pixel=1m,现在是100pixels=1m)  将Canvas的位置放在Circle圆心(Position值相同即可)
运行游戏,手动改变分数,发现100分时候只显示10分  勾选Text的best fit,自适应大小
任务5:控制小球旋转
围绕圆心顺时针匀速旋转 -- 围绕z轴旋转
transform.Rotate(new Vector3(<span style="color: #, <span style="color: #, -<span style="color: #) * speed * Time.deltaTime);
speed 设置为90; // 每秒钟旋转90°
任务6:针的Prefab预制体
创建针 Image-&Pin颜色为黑,大小放大到接近Circle的直径,方向从下往上
创建针头 Image-&Circle成为Pin的子物体颜色为黑,改变大小,放在针的下端
给针头Circle添加碰撞器Circle Collider 2D
做成Prefab
任务7:开发GameManager生成针(实例化)
创建空物体StartPoint,放置于针准备发射的位置
创建空物体SpawnPoint,放置于针实例化的位置(在屏幕外部)
创建空物体GameManager,用于管理针的实例化  创建GameManager.cs  控制针的发射:
得到两个点的位置:
private Transform startPprivate Transform spawnP
startPoint = GameObject.Find("StartPoint").spawnPoint = GameObject.Find("SpawnPoint").
得到Prefab:
public GameObject pinP // 拖拽赋值
实例化针:
GameObject.Instantiate( pinPrefab, spawnPoint.position, pinPrefab.transform.rotation);
public class GameManager : MonoBehaviour {
public GameObject pinPprivate Transform spawnP
// Use this for initialization
void Start() {
spawnPoint = GameObject.Find("SpawnPoint").
SpawnPin();
private void SpawnPin() {
GameObject.Instantiate(pinPrefab, spawnPoint.position, pinPrefab.transform.rotation);
任务8&9&10:控制针移动到准备位置 & 针的插入 & 判断针到达表面
给Pin添加脚本PinMovement.cs来控制针的初始运动
Pin的运动分为两段:1. 准备阶段;2. 插针阶段  用bool hasReachedStartPoint = 来判断是否到达StartPoint  用bool isInserting = 来判断是否在插针阶段
1. 准备阶段
private Transform startP // 获取该Transform与上任务相同
逻辑思路:  if(isInserting == false) {    if(hasReachedStartPoint == false) {&&// 准备阶段      transform.position = Vector3.MoveTowards        (transform.position, startPoint.position, speed * Time.deltaTime);      // MoveTowards(起点,终点,速度) 返回一个Vector3的位置信息    }  }
2. 判断是否到达StartPoint
Vector3.Distance(transform.position, startPoint.position) & 0.05f;// Vector3.Distance(两点坐标),返回的是两点之间的距离
如果到达,hasReachedStartPoint =
3. 插针阶段
检测鼠标左键的按下  Input.GetMouseButtonDown(0);
发射针:  private PinMovement currentP  实例化的时候currentPin得到Pin的实体(赋值给currentPin即可)    currentPin = GameObject.Instantiate(..).GetComponent&PinMovement&();  currentPin.StartInsert();
  StartInsert() {    isInserting =    hasReachedStartPoint =  }
朝着Circle运动:  得到Circle的位置 private Transform... = GameObject.Find(...);  transform.position = Vector3.MoveTowards(...);
运行,点击鼠标,Pin insert了,但是在一个奇怪的位置停住了
发现针头的名字也是Circle,怀疑得到的是这个Circle的坐标,将其改为PinHead
还是不对,将脚本中Circle设置为public,运行游戏,双击Unity里的public Circle,发现这个Circle的属性和PinHead的属性相同,但是不知道怎么改。。。故使用FindGameObjectWithTag("Circle");实现
成功运行了。但是将代码改回Find("Circle")后发现,也成功运行了。不知道为何。有点懵逼。
4. 判断是否到达目标位置(是否插入Circle)
同样用Vector3.Distance()判断
在Unity中手动计算针在到达小球表面时候针和小球原点的距离
private Vector3 targetPosition = circleTransform.position - Vector3(0, diff,0);if(Vector3.Distance(transform.position, targetPosition) & 0.05f) {  transform.position = targetP // 最后位置的到达  transform.parent = // 让针随着小球转动  isInserting =}
void Update () {
if (isInserting == false) {
if (hasReachedStartPoint == false) {
// 准备阶段
transform.position = Vector3.MoveTowards(transform.position, startPoint.position, speed * Time.deltaTime);
// MoveTowards(起点,终点,速度) 返回一个Vector3的位置信息
if (Vector3.Distance(startPoint.position, transform.position) & <span style="color: #.05f) {
transform.position = startPoint.
hasReachedStartPoint = true; // 到达以后transform就不变了,除非isInserting == true
// 插针阶段
transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime);
if (Vector3.Distance(transform.position, targetPosition) & <span style="color: #.05f) {
transform.position = targetP // 最后位置的到达
transform.parent = circleT // 让针随着小球转动
isInserting = false; // 到达小球表面,isInserting == hasReached == 不会执行代码
public void StartInsert() {
isInserting = true;
hasReachedStartPoint = true;
任务10:针的连环发射
在点击鼠标左键的时候,StartInsert();之后进行SpawnPin();即可
针的运动速度有点慢,修改为15
void Update() {
// GameManager.csif (Input.GetMouseButtonDown(<span style="color: #)) {
currentPin.StartInsert();
SpawnPin();
任务11:针头的碰撞和游戏结束
针头有了Collider,但是没有刚体组件  添加Rigidbody2D,重力Gravity Scale设置为0  并使用Trigger模式(不想让碰撞影响运动)
如果两个针头碰撞,游戏结束
给PinHead添加Tag "PinHead",方便Trigger的检测
PinHeadCollision.cs  void OnTriggerEnter2D(Collider2D collier) {    if(collider.tag == "PinHead") {      // 调用GameManager的方法      GameObject.Find("GameManager").        GetComponent&GameManager&().GameOver();    }  }
GameManager.GameOver():
// 因为每个PinHead上都会有PinHeadCollision的脚本,所以Collision发生的时候会执行多次GameOver(),而实际上执行一次即可
private bool isGameOver =
public void GameOver() {  if(isGameOver)  //&游戏结束后小球不旋转了  GameObject.Find("Circle").GetComponent&RotateSelf&().enabled =  isGameOver =
在Update()中,游戏结束后就不能控制Pin了
Update() {  if(isGameOver)  ...}
任务12:控制分数的显示
private int score = 0;public Text scoreT& // using UnityEngine.UI;
// 在按下鼠标的时候加分scoreText.text = score.ToString();
void Update() { // GameManager.cs
if (isGameOver) return;
if (Input.GetMouseButtonDown(<span style="color: #)) {
currentPin.StartInsert();
scoreText.text = score.ToString();
SpawnPin();
任务13:游戏结束动画的显示
思路:  游戏背景颜色改变  Camera size变小(画面变近)
GameManager.cs
IEnumerator GameOverAnimation() {& // using System.C  while(true) {    mainCamera.backgroundColor =       Color.Lerp(mainCamera.backgroundColor, Color.red, speed * Time.deltaTime);    mainCamera.orthographicSize =       Mathf.Lerp(mainCamera.orthographicSize, 4, speed * Time.deltaTime);    if(Mathf.Abs(mainCamera.orthographicSize - 4) & 0.01f)&& // 判断是否到达目标值    yield return 0;  }  yield return new WaitForSeconds(0.5f); // 暂停0.5s(因为播放完动画会自动重新开始游戏)  // using UnityEngine.SceneManagement  SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);& // 重载游戏}
// Lerp(起始值,目标值,改变速度) -- 渐变
在GameOver()中加入StartCoroutine(GameOverAnimation());调用;
(将circle旋转速度改为140,可玩性更强一些)
阅读(...) 评论()求助,cocoscreator android打包失败_百度知道
求助,cocoscreator android打包失败
我有更好的答案
去看这个路径下面的native.log 文件 里面写的有错误的原因。希望对你有帮助,望采纳。
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 cocos creator api 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信