问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样用透明胶做出一个小球?

发布网友 发布时间:2022-04-22 22:03

我来回答

14个回答

懂视网 时间:2022-04-20 11:17

学canvas学了有一个多礼拜了,觉得canvas真心好玩。学canvas的人想法估计都跟我差不多,抱着写游戏的态度去学canvas的。所以运动学啊、碰撞检测啊、一些简单的算法神马的是基础啊。以前没做过游戏的我学起来还真心吃力。今天就来说下用canvas写个最简单的弹力球游戏,就运用了最简单的重力作用以及碰撞检测。

  先上DEMO:弹力球DEMO (鼠标点击canvas里的空白区域会给与小球新速度)

  【创建小球对象】

  第一步就是先创建一个小球对象,写好小球的构造函数:

代码如下:
var Ball = function(x , y , r , color){
this.x = x;
this.y = y;
this.oldx = x;
this.oldy = y;
this.vx = 0;
this.vy = 0;this.radius = r;
this.color = color;
}

  小球属性很简单,xy是小球的坐标,vx和vy是小球的初始水平速度和初始垂直速度。radius就是小球的半径,color是小球颜色(为了区分不同球),oldx和oldy是记录小球的上一帧的位置,后期球与球之间碰撞后用于位置修正(后面其实没用上,位置修正直接计算了,如果用oldx来设置很不严谨,不过记录一下,难免会用得到)。

  小球属性写好后,就在小球原型中写小球的动作了:

代码如下:
Ball.prototype = {
paint:function(){
ctx.save();
ctx.beginPath();
ctx.arc(this.x , this.y , this.radius , 0 , Math.PI*2);
ctx.fillStyle=this.color;
ctx.fill();
ctx.restore();
this.moving = false;
},
run:function(t){
if(!this.candrod) {
this.paint();
return};
this.oldx = this.x;
this.oldy = this.y;


if(Math.abs(this.vx) < 0.01){
this.vx = 0;
}
else this.vx += this.vx>0? -mocali*t : mocali*t;

this.vy = this.vy + g * t;

this.x += t * this.vx * pxpm;
this.y += t * this.vy * pxpm;

if(this.y > canvas.height - ballRadius || this.y < ballRadius){
this.y = this.y < ballRadius ? ballRadius : (canvas.height - ballRadius);
this.vy = -this.vy*collarg
}
if(this.x > canvas.width - ballRadius || this.x < ballRadius){
this.x = this.x < ballRadius ? ballRadius : (canvas.width - ballRadius);
this.derectionX = !this.derectionX;
this.vx = -this.vx*collarg;
}
this.paint();
},

}

  小球的动作方法也很简单,就两个,第一个方法是把自己画出来,第二个方法就是控制小球的运动。t是当前帧与上一帧的时间差。用于计算小球的速度的增量从而得出小球的位移增量,从而计算出小球的新位置并且将小球重绘。得出新位置的同时判断小球的新位置有无超出墙壁,如果超出则进行速度修正让小球反弹。

  第二个方法里的一些常量ballRadius =30, g = 9.8 , mocali = 0.5,balls = [],collarg = 0.8,pxpm = canvas.width/20; 意思很明显:ballradius是球半径,g是重力加速度,mocali是空气阻力引起的水平方向的减速度,balls是一个用于存放小球对象的数组,collarg是弹力系数。pxpm是像素与米之间的映射,把画布当成是20米宽的区域。

  【碰撞检测】

  创建好小球对象后,就开始写碰撞了,小球与小球之间的碰撞:

代码如下:
function collision(){
for(var i=0;i for(var j=0;j var b1 = balls[i],b2 = balls[j];
if(b1 !== b2){
var rc = Math.sqrt(Math.pow(b1.x - b2.x , 2) + Math.pow(b1.y - b2.y , 2));
if(Math.ceil(rc) < (b1.radius + b2.radius)){

//获得碰撞后速度的增量
var ax = ((b1.vx - b2.vx)*Math.pow((b1.x - b2.x) , 2) + (b1.vy - b2.vy)*(b1.x - b2.x)*(b1.y - b2.y))/Math.pow(rc , 2)
var ay = ((b1.vy - b2.vy)*Math.pow((b1.y - b2.y) , 2) + (b1.vx - b2.vx)*(b1.x - b2.x)+(b1.y - b2.y))/Math.pow(rc , 2)

//给与小球新的速度
b1.vx = (b1.vx-ax)*collarg;
b1.vy = (b1.vy-ay)*collarg;
b2.vx = (b2.vx+ax)*collarg;
b2.vy = (b2.vy+ay)*collarg;

//获取两球斜切位置并且强制扭转
var clength = ((b1.radius+b2.radius)-rc)/2;
var cx = clength * (b1.x-b2.x)/rc;
var cy = clength * (b1.y-b2.y)/rc;
b1.x = b1.x+cx;
b1.y = b1.y+cy;
b2.x = b2.x-cx;
b2.y = b2.y-cy;
}
}
}
}
}


  每一帧都进行小球之间碰撞的判断,如果两个小球球心距离小于两球半径之和,则证明两个小球发生了碰撞。然后进行计算两个小球碰撞之后的速度变化量。ax和ay就是速度变化量。 
后面长长的公式就是这个:
2015512173816364.png (334×192)

具体原理我就不说了,想了解原理就直接戳 小球碰撞的算法设计 。 下面那段就是防止小球重复碰撞检测导致无法正常反弹,所以计算两小球的球心距离,然后算出两个小球的斜切位置,并且将两个小球的位置进行更正。

  【运动动画】

  最后一步:

代码如下:

canvas.onclick = function(event){
event = event || window.event;
var x = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft - canvas.offsetLeft;
var y= event.clientY + document.body.scrollTop + document.documentElement.scrollTop - canvas.offsetTop;

balls.forEach(function(){
this.vx = (x - this.x)/20; //初速度 m/s
this.vy = (y - this.y)/20;
});
}

function animate(){
ctx.save();
ctx.fillStyle = "rgba(255,255,255,0.2)";
ctx.fillRect(0,0,canvas.width,canvas.height)
ctx.restore();
// ctx.clearRect(0,0,canvas.width,canvas.height)

var t1 = new Date();
var t = (t1 - t0)/1000;
collision();
balls.forEach(function(){
this.run(t);
});

t0 = t1;

if("requestAnimationFrame" in window){
requestAnimationFrame(animate);
}
else if("webkitRequestAnimationFrame" in window){
webkitRequestAnimationFrame(animate);
}
else if("msRequestAnimationFrame" in window){
msRequestAnimationFrame(animate);
}
else if("mozRequestAnimationFrame" in window){
mozRequestAnimationFrame(animate);
}
}
}

通过点击画布的位置来给于小球初速度,然后animate就是动画的每一帧运行的方法。上面的 ctx.fillStyle = "rgba(255,255,255,0.2)"; ctx.fillRect(0,0,canvas.width,canvas.height)是给小球添加虚影,我觉得这样会更好看,如果觉得不喜欢,就直接用clearRect清除就行了。然后就是计算每一帧的时间差,然后对小球数组里小球数组进行遍历重绘。然后再加入碰撞检测的collision方法。动画也就做完了。

  至此,就已经写完了,源码地址:

  https://github.com/whxaxes/canvas-test/blob/gh-pages/src/Other-demo/shotBall.html

热心网友 时间:2022-04-20 08:25

用透明胶做出一个小球的具体方法:

1、用剪刀剪下胶布的一小段。

2、拉开胶布,(有粘力的那一面朝上)用剪下的那一小段胶布的有粘力的那一面和胶布有粘力的那一面相互粘。

3、一直粘,当那一小段胶布有一个球的时候就可以了,把球拿下来继续粘。

4、粘好后,把球泡到水里,去除表面的黏性,就做好了。完成。

热心网友 时间:2022-04-20 09:43

透明胶黏完之后内存地方就是光滑的啦,这就说明,粘掉的地方,其实就是上面那层有粘性的地方,先取出一块,再对折,再拉出一段透明胶,记住,有捏性的地方朝外,把手指没有碰过的地方放到拉出来的地方,不一会儿就会看到一个用有粘性的地方堆积起来的东西,再把他从透明胶上拿下来然后就拉“丝”( 这种东西只有玩过才知道。)

热心网友 时间:2022-04-20 11:18

就是拿一段胶布把它对折,然後再交不上面不停的捏捏捏捏你,然後呢,就会出现一个。你拿著这个球再交不上你捏捏你,然後她就会知道很多的诗。然後呢他就会慢慢的别

热心网友 时间:2022-04-20 13:09

是不是说用彩色透明胶的胶质部分做?我记得小学的时候玩过,好像是先取两块透明胶在一起不断的粘,过一会儿就会出现一个很小很小的小球,有些不规则的,然后拿着这个不断的在透明胶上滚啊粘啊,把胶质都粘下来,就变成一个比较大的,很光滑的圆球了

热心网友 时间:2022-04-20 15:17

就是先拿一小段有胶性的胶带,然后一直在胶带上粘,胶带上会有一小块粘物出现,等到一定大小,取下来然后粘

热心网友 时间:2022-04-20 17:42

这是我自己做的,楼主要的是这种吗?

热心网友 时间:2022-04-20 20:40

咋做咋做,出个教程吧

热心网友 时间:2022-04-20 23:55

很简单呐,我现在都在自己做

热心网友 时间:2022-04-21 03:26

像这样的?这个是我小时候自己做的

热心网友 时间:2022-04-21 07:14

拿个乒乓球用 你的透明胶一圈一圈的绕啊绕 最后你会发现哇怎么是个球、 纯手写、希望采纳!

热心网友 时间:2022-04-21 11:19

用剪子剪一个圆行不行。侧面看就是球

热心网友 时间:2022-04-21 15:40

这个很简单~我做过。你没做过地球仪???切成12片或者更多的扇形!

热心网友 时间:2022-04-21 20:18

很纳闷,用神马做呢??
做球怎么做(用胶布怎样做球)

1、塑形:先剪下一块块透明胶,然后把透明胶的粘贴部分互相粘贴,然后快速撕掉,反复几次,就会有一块明显胶状的东西出来。2、然后用有少量胶状物质的那一块同没有粘贴过的继续相互粘贴,然后快速撕掉。3、等到胶状物质比较大的时候用它粘住透明胶的边缘,在你粘贴的时候,最好先撕出一段将胶带没有粘...

怎样用透明胶做出一个小球?

用透明胶做出一个小球的具体方法:1、用剪刀剪下胶布的一小段。2、拉开胶布,(有粘力的那一面朝上)用剪下的那一小段胶布的有粘力的那一面和胶布有粘力的那一面相互粘。3、一直粘,当那一小段胶布有一个球的时候就可以了,把球拿下来继续粘。4、粘好后,把球泡到水里,去除表...

怎么粘胶带球

1、用剪刀剪下“透明胶带”的一小段。2、让“透明胶带”的粘性部分,互相粘贴,直至出现“胶状物质”。3、将出现的“胶状物质”揉成一个小球。在这里,需要注意的是:如果“胶状物质”不够,不能揉成小球,那么就重复上一步操作,直至出现的“胶状物质”,能够揉成一个小球。4、将“小球”卷到喜欢...

怎样用透明胶做出一个小球?

先裹12个一样大的圆环,然后把它看成圆的十二分,挨个沾起来,不够的自己再卷,粘完了就四周用透明胶裹,一点一点的移大概需要半小时吧

请问胶带粘粘球怎么做

1、先用一小段双面胶揉成一个小球。2、然后用透明胶粘。3、再把双面胶上的透明胶拿下来,就可以粘的很大。4、也可以不拿下来,这样会粘的更快。

做透明胶球有什么技巧吗?

是不是说用彩色透明胶的胶质部分做?我记得小学的时候玩过,好像是先取两块透明胶在一起不断的粘,过一会儿就会出现一个很小很小的小球,有些不规则的,然后拿着这个不断的在透明胶上滚啊粘啊,把胶质都粘下来,就变成一个比较大的,很光滑的圆球了 ...

用透明胶带怎么做小球

你确定是透明胶带的的“胶” 先拿两片胶带 带胶的那一面对着粘 发现哪个胶带上有胶 等那个胶足够大时 就拿那哪一点点胶 去到别的胶带有胶的那一面把上面的胶粘下来就好了 会越来越大的 (不过要很多胶带 还要有足够的时间)

粘粘球教程

等到胶状物质比较大的时候用它粘住透明胶的边缘,在你粘贴的时候,最好先撕出一段将胶带没有粘性的那一面和胶带卷没有黏性的一面紧贴,用完了撕出的一段就继续扯出来。如此往复。然后用手将胶状物质滚着卷,直到卷成小球,反复卷,卷到你喜欢的大小,把球泡在水里,去除表面的黏性,就做好了。

怎样用胶布做弹力球

一、塑形:先剪下一块块透明胶,然后把透明胶的粘贴部分互相粘贴,然后快速撕掉。然后用有少量胶状物质的那一块同没有粘贴过的继续互相粘贴,然后快速撕掉。反复几次,就会有一块明显胶状的东西出来。二、等到胶状物质比较大的时候(直径大约3毫米)用它粘住透明胶(用一卷那种)的边缘,[在你粘贴的...

胶带粘球球怎么开头?

1、用剪刀剪下胶布的一小段。2、拉开胶布(有粘力的那一面朝上)用剪下的那一小段胶布的有粘力的那一面和胶布有粘力的那一面相互粘。3、一直粘,当那一小段胶布有一个球的时候就可以了,把球拿下来继续粘。4、当胶布粘完之后,用水冲洗胶布球,总之一定要让胶布球失去粘力。就...

怎么用透明胶滚小球 用胶带怎么做小胶球 如何在透明胶上做小球 透明胶怎么粘那种小球 只用透明胶水做起泡胶 透明胶怎么做 透明胶带粘小球视频 透明胶机怎么用 透明胶带的胶怎么去除
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
相恋七年男友不愿结婚 让我找别人 紧急求助:连云港机场到新浦区建设东路78怎么走 清肝降压胶囊基本信息 清肝降压胶囊的功效 判断题中的两种量是不是成比例,成什么比例,并说明理由.如果 m:6=8... 爸爸妈妈我想对你说 500字 《谢谢你的爱一妈妈的故事》读后感三百字 谢谢你的爱妈妈的故事中,白大引发的烦恼读后感 猫咪绝育第二天开始吃干猫粮可以吗 多久可以喂食 鲁东大学心理与教育学院可喜成果 怎样用透明胶带粘球(就是小学生玩的那种) 小朋友玩的透明胶有毒吗? 彩色透明胶怎么玩, 离子烫到底是怎么回事 离子烫好吗? 什么是离子烫 离子烫!!! 离子烫有什么注意事项? 离子烫., 是关于离子烫的 什么是离子烫直发? 离子烫的原理是什么? 离子烫是什么 关于离子烫 离子烫是怎么回事? 离子烫是什么意思? 离子烫是什么?与其他烫发有什么不同 离子烫是什么,离子烫是烫卷和拉直吗? 沃克静水器与磁化水的区别? 沃克净水器有水垢吗? 用透明胶带可以做哪些玩具? 在手机上贴透明胶会不会有什么不良反应? 做透明胶球有什么技巧吗? 为什么那么多女生喜欢粘透明胶布球,好玩吗?[PS:下图是我借一个同学的,不是我的] 胶带纸和普通的透明胶有什么区别 透明胶带的材质 透明胶带都是什么材质的? 透明胶带上的胶是什么胶? obs直播有什么特点? 直播软件OBS是什么? OBS直播是什么?有多少个直播再用还是直播都普遍使用? 用OBS视频源获取视频出现红点视频出不来是什么情况? obs视频源监听声音会录到话筒里? 如何更好地使用OBS? 为什么obs直播游戏要用游戏源 OBS多个视频怎么进行轮播? 麻烦问下,obs直播lol。游戏源捕捉不到lol客户端是怎么回事 OBS录制LOL,视频源黑屏 obs录制视频怎么播放 obs录制软件中视频编码器选择哪个比较好??