个人随笔
目录
接住掉落物品小游戏js实现思路
2020-01-17 23:01:50

现有一种H5游戏,就是上面一直在掉落物品,下面有一个人或者盆子用手指左右移动来接住,游戏规则是,如果刚好接住掉落物品,那么就接成功。

那么怎么去触发这个接到呢,想着要是物品掉落的时候自身监听自己的掉落然后触发一个事件该多好,就可以时时监听自己的坐标然后检查跟接住者的坐标对比即可,但是
这个实现可能性有点低,因为要对自己的坐标有监控事件,需要靠轮询,性能耗费太大.

方案一、用一个毫秒级的定时器来轮询接住者和掉落物品的坐标,相同的话就是接住。
很明显方案一的性能耗费太大,并且一直用定时器轮询,掉落物品太快或者移动太快的话,会有不准确或者卡顿的现象。

方案二、借助物品的animate事件,该事件可以控制物品从一个状态移动到另一个状态,在移动到另一个状态后会触发一个事件,我们可以靠触发的这个事件来
实现是否接住这个逻辑。

  • 1、设置掉落物品另一个状态的高度为接住者水平线的高度
  • 2、当掉落物品到达另一个状态也就是接住者水平线的高度后会触发一个事件
  • 3、此时物品和接住者肯定在同一个水平线,只不过x轴不知道相不相同,所以在事件中判断物品的x坐标和接住者的x坐标相同(当然相同不科学,应该是靠近,在附近即可)
  • 4、如果判断成立则表明接住,做后续操作。

按理论分析下方案二的实现明显比方案一好很多,下面提供一个初始代码:

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="baidu-site-verification" content="I97XTJlp7f" />
  6. <meta name="google-site-verification" content="RoFGtE1oyzShe_qKa3PLSLrav9Ot9PAOUg--qHbr2Ac" />
  7. <meta name="sogou_site_verification" content="92rPTKDuH2"/>
  8. <meta name="360-site-verification" content="30806a2490d1812507d7701c23df3600" />
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
  10. <meta name="apple-mobile-web-app-capable" content="yes">
  11. <meta name="apple-mobile-web-app-status-bar-style" content="black">
  12. <meta name="format-detection" content="telephone=no">
  13. <meta http-equiv="Expires" CONTENT="-1">
  14. <meta http-equiv="Cache-Control" CONTENT="no-cache">
  15. <meta http-equiv="Pragma" CONTENT="no-cache">
  16. <title>plane</title>
  17. <script src="jquery.min.js"></script>
  18. <script>
  19. $(function(){
  20. $("#caisheng").animate({top:'280px'},5000,"linear",function(){
  21. stop($(this),5000);
  22. });
  23. $("#caisheng2").animate({top:'280px'},4000,"linear",function(){
  24. stop($(this),4000);
  25. });
  26. $("#caisheng3").animate({top:'280px'},3000,"linear",function(){
  27. stop($(this),3000);
  28. });
  29. $("#caisheng4").animate({top:'280px'},5000,"linear",function(){
  30. stop($(this),5000);
  31. });
  32. });
  33. function stop(obj,speed){
  34. //获取横坐标
  35. var left = obj.offset().left;
  36. if(left>=170){
  37. obj.hide();
  38. }else{
  39. //继续掉落
  40. obj.animate({top:'560px'},speed,"linear",function(){$(this).hide();});
  41. }
  42. }
  43. </script>
  44. <style>
  45. #caisheng{
  46. position:fixed;
  47. top:0;
  48. left:0;
  49. right:0;
  50. width:20px;
  51. height:20px;
  52. background:#000;
  53. margin:0px auto;
  54. }
  55. #caisheng2{
  56. position:fixed;
  57. top:0;
  58. left:50px;
  59. width:20px;
  60. height:20px;
  61. background:#000;
  62. }
  63. #caisheng3{
  64. position:fixed;
  65. top:0;
  66. left:200px;
  67. width:20px;
  68. height:20px;
  69. background:#000;
  70. }
  71. #caisheng4{
  72. position:fixed;
  73. top:0;
  74. left:80px;
  75. width:20px;
  76. height:20px;
  77. background:#000;
  78. }
  79. #line{
  80. position:fixed;
  81. top:300px;
  82. left:170px;
  83. right:0px;
  84. width:100%;
  85. height:2px;
  86. background:red;
  87. }
  88. </style>
  89. </head>
  90. <body>
  91. <div id="caisheng"></div>
  92. <div id="caisheng2"></div>
  93. <div id="caisheng3"></div>
  94. <div id="caisheng4"></div>
  95. <div id="line"></div>
  96. </body>
  97. <script>
  98. </script>
  99. <style>
  100. .bg{
  101. margin:0 auto;
  102. border:1px solid #666;
  103. margin-top:30px;
  104. }
  105. </style>
  106. </html>


当然,若是各位还有别的方案可以提出来,麻烦指点下我,谢谢!

 1773

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2