游戏蛮牛学习群(纯技术交流,不闲聊):539178957
新宝娱乐城博彩打不开 手机端
开发者专栏

关注:2264

当前位置:新宝娱乐城博彩打不开 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 242|回复: 2
发新帖

新宝娱乐城信誉好不好: [白鹭教育] [微信小游戏《跳一跳》3:事件]

[复制链接]  [移动端链接]
排名
60174
昨日变化
13

新宝娱乐城博彩打不开 www.sl6cl.com.cn 4

主题

8

帖子

17

积分

Rank: 9Rank: 9Rank: 9

UID
290419
好友
1
蛮牛币
47
威望
0
注册时间
2018-7-19
在线时间
3 小时
最后登录
2018-7-23
跳转到指定楼层
楼主

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
TOUCH_BEGIN手指按下的逻辑
对小 i 做形变处理,压缩小 i
  • 小 i 的压缩,只限于y轴方向,所以使用scaleY属性来控制。
  • 压缩的过程要使用Tween动画,这里设置0.5秒的持续时长。
  • 设置小 i 的状态isReadyJump为真,让小 i 处于蓄力状态。

播放蓄力的音频
  • 蓄力的音频在资源里,名称为push_mp3。
  • 在前面的章节中的初始化中,我们已经把相关音频资源添加到了内存里。

   
[JavaScript] 纯文本查看 复制代码
       // 初始化音频
this.pushVoice = RES.getRes('push_mp3');
  • egret.SoundChannel类控制程序中的声音,每个声音都会分配一个声道,SoundChannel类包含stop()方法,用于设置音频和监视播放进度的属性。

   
[JavaScript] 纯文本查看 复制代码
      // 播放按下的音频
this.pushSoundChannel = this.pushVoice.play(0, 1);
  • 这里this.pushSoundChannel获取到了蓄力音频的声道,在手指抬起的时候,要使用stop()方法结束蓄力音频的播放。

监听按下的时长,计算跳跃的x轴距离
  • 这里有多种做法可以获取蓄力,蓄力其实就是手指按下到抬起所经历的时长。
  • 第一种逻辑,在手指按下的时候开始计时,结束的时候停止计时,获取时长。
  • 第二种逻辑,在心跳计时器里计算时长,按下的时候开始计算,抬起的时候停止,获取时长。
  • 第一种,开始和结束,理论上都会消耗时长,所以精度上略差。第二种的时间调用,是每一帧调用一次,不停的在调用。不过每次之间的时长,跟所在的机器和当时的运行环境有关,间隔时间并不是完全相同的。
  • 我们拿第二种逻辑来实现计时,并计算x周小 i 的落地距离。

  
[JavaScript] 纯文本查看 复制代码
// 在初始化的init()方法里面添加心跳计时器,如果报错的话,请添加game游戏库
// 心跳计时器
egret.Ticker.getInstance().register(function (dt) {
dt /= 1000;
if (this.isReadyJump) {
this.jumpDistance += 300 * dt;
}
}, this)
添加game游戏库
  • 如果上面的代码报Ticker的错误,原因可能是没有添加game游戏库。

  • 保存文件之后,终端下执行egret clean清空一下缓存,之后执行egret run即可。

TOUCH_END手指放开的逻辑
对小 i 做形变处理,和跳跃动画同时执行停止蓄力的音频,播放跳跃的音频
      
[JavaScript] 纯文本查看 复制代码
    // 停止播放按压音频,并且播放弹跳音频
this.pushSoundChannel.stop()
this.jumpVoice.play(0, 1);
根据跳跃的x轴距离,计算小 i 的落点
  • 先重新计算夹角,确保小 i 沿着中心线调到下一个跳台上

  • 然后根据蓄力距离计算落点坐标

        
[JavaScript] 纯文本查看 复制代码
 // 落点坐标
this.targetPos.x = this.player.x + this.jumpDistance * this.direction;
// 根据落点重新计算斜率,确保小人往目标中心跳跃
this.targetPos.y = this.player.y + this.jumpDistance * (this.currentBlock.y - this.player.y) / (this.currentBlock.x - this.player.x) * this.direction;
  • 这里的落点x轴坐标就是小 i 原来的x坐标加上蓄力的距离,y轴坐标通过夹角可以得出。

跳跃过程解析
蓄力结束之后,首先计算出落点,即小 i 跳跃后落在的点。 根据起跳点和落点确定跳跃弧度,然后执行跳跃动画。
蓄力的大小
玩过跳一跳的都知道,手指按下的时间越长,跳跃的力度越大。 我们使用egret中的game库下的心跳控制器Ticker。
心跳控制器
egret已经封装的js的setInterval为Timer对象,而Ticker从其功能上来看也是一个计时器,但Ticker更接近系统级别,是计时间隔固定并且会在Egret程序运行期间一直进行的计时器。 开启心跳侦听:不同于Egret中常规的事件侦听,Ticker不使用addEventListener这样的侦听。 注册Ticker事件的方法是直接调用Egret中的Ticker单例所提供的注册方法,这个单例是egret.Ticker.getInstance(),直接将侦听处理函数作为参数传给该单例的register方法即可:
      
[JavaScript] 纯文本查看 复制代码
   // 心跳控制器
egret.Ticker.getInstance().register(function (dt) {
  console.log(dt);
}, this)
注意:Ticker在事件的侦听处理函数中会提供一个时间偏移量的参数,就是本次调用与上次调用之间的时间间隔。每次的时间偏移是有所波动,但大部分都在16ms与17ms之间,与我们理论时间间隔16.66ms吻合的。
开始计算跳跃x轴的距离
我们这里默认蓄力的大小是通过小 i 落点的x轴方向的偏移来体现的。
声明跳跃的偏移值变量:
   
[JavaScript] 纯文本查看 复制代码
  // 跳的距离
public jumpDistance: number = 0;
在Ticker控制器中,在判断处于按下状态(isReadyJump为true)的时候,不停的增加jumpDistance:
      
[JavaScript] 纯文本查看 复制代码
egret.Ticker.getInstance().register(function (dt) {
dt /= 1000;
if (this.isReadyJump) {
this.jumpDistance += 300 * dt;
}
}, this)
TOUCH_BEGIN的时候,我们设置了this.isReadyJump = true,TOUCH_END的时候设置this.isReadyJump = false。这样就可以完全控制Ticker控制器,让jumpDistance只在蓄力的状态下改变。
落点夹角的重新计算
小 i 的跳跃方向,始终要朝向下一个方块的中心点,这样才能保证,小 i 始终会跳到下一个盒子上这里我们可以通过(y2-y1)/(x2-x1)来计算夹角的比值,因为我们已经知道了落点的x轴坐标,即小 i 的其实x轴加上跳跃的偏移值jumpDistance。之后通过数学运算,计算出落点的y轴偏移。 最新的方块为this.currentBlock,小 i 为this.player,tan角度值为:
      
[JavaScript] 纯文本查看 复制代码
this.currentBlock.y - this.player.y) / (this.currentBlock.x - this.player.x
y轴偏移为(注意,增加上方向this.direction控制):
      
[JavaScript] 纯文本查看 复制代码
this.jumpDistance * (this.currentBlock.y - this.player.y) / (this.currentBlock.x - this.player.x) * this.direction;
完整的落点坐标(this.targetPos),需要加上述的偏移值,加上小 i 的原始坐标,代码如下:
      
[JavaScript] 纯文本查看 复制代码
// 落点坐标
this.targetPos.x = this.player.x + this.jumpDistance * this.direction;
// 根据落点重新计算斜率,确保小人往目标中心跳跃
this.targetPos.y = this.player.y + this.jumpDistance * (this.currentBlock.y - this.player.y) / (this.currentBlock.x - this.player.x) * this.direction;

          手指放开后onKeyUp()方法的其余逻辑
判断是否处于按下状态
         
[JavaScript] 纯文本查看 复制代码
/ 判断是否是在按下状态
if (!this.isReadyJump) {
return;
}
初始化落点坐标
         
[JavaScript] 纯文本查看 复制代码
// 声明落点坐标
if (!this.targetPos) {
this.targetPos = new egret.Point();
}
设置屏幕不可点,等小 i 落下后再让屏幕可点,放置小 i 在空中的时候又可以蓄力跳跃的bug
     
[JavaScript] 纯文本查看 复制代码
     // 立刻让屏幕不可点,等小人落下后重新可点
this.blockPanel.touchEnabled = false;
移除之前所有的动画,并且设置小 i 的层级,置于最顶层显示
      
[JavaScript] 纯文本查看 复制代码
   // 清楚所有动画
egret.Tween.removeAllTweens();
       //设置小 i 的层级,置于最顶层显示
this.blockPanel.addChild(this.player);
结束跳跃状态
      
[JavaScript] 纯文本查看 复制代码
    // 结束跳跃状态
this.isReadyJump = false;

5熟悉之中
733/1000
排名
3579
昨日变化
13

1

主题

174

帖子

733

积分

Rank: 5Rank: 5

UID
56245
好友
0
蛮牛币
1823
威望
0
注册时间
2014-11-18
在线时间
180 小时
最后登录
2018-7-26
沙发
发表于 6 天前 | 只看该作者
深奥啊,支持一下~

排名
60174
昨日变化
13

4

主题

8

帖子

17

积分

Rank: 9Rank: 9Rank: 9

UID
290419
好友
1
蛮牛币
47
威望
0
注册时间
2018-7-19
在线时间
3 小时
最后登录
2018-7-23
板凳
 楼主| 发表于 3 天前 | 只看该作者
源码下载:链接:https://pan.baidu.com/s/1D3cgQHR7vOZ_Gdc6gSoiqw  密码:88q3

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 新宝娱乐城博彩打不开 返回列表
  • 李思思元元月亮姐姐 盘点央视主持人与子女温馨合影 2018-12-11
  • “忻州工匠”“忻州技能标兵”评选活动启动 2018-12-11
  • 包住内力,在不断变化中寻找契机,可出击可借力亦可卸力。 2018-12-10
  • 广州中考首用计算机辅助命题 满满的广州元素 2018-12-09
  • 植树、采茶、挖野菜…… 这才是春天正确的打开方式 2018-12-08
  • 【纯黑】《生化危机7》克里斯DLC不是英雄 2018-12-08
  • 150块地铁灯牌高调“炫父” 温暖南京城 2018-12-07
  • 【光明网专论】鞠立新:习近平新时代中国特色社会主义经济思想的内涵、逻辑和特质 2018-12-06
  • 江西“放管服”改革再出实招 2018-12-05
  • 首列商用磁浮2.0版列车下线 适用中心城市到卫星城间交通--旅游频道 2018-12-05
  • 空警-500改进型新照曝光,监控效率成倍提升 2018-12-04
  • 对美敲诈老手不能软越软越诈你要打就来 2018-12-04
  • 赵旭日:对阵恒大很有缘 比赛要一场一场去踢 2018-12-03
  • 《数码宝贝故事》第三阶段首发初回特典公布--人民网游戏 2018-12-03
  • 端午小长假自驾游归来 车辆保养完整攻略 2018-12-02
  • 424| 945| 286| 945| 599| 886| 237| 998| 892| 863|