请原谅这个有趣的头衔.我已经创建了一个200个球弹跳和碰撞的小图形演示,两个都在墙壁和彼此之间.您可以在此处查看我目前所拥有的内容:http://www.exeneva.com/html5/multipleBallsBouncingAndColliding/
问题是,每当它们相互碰撞时,它们就会消失.我不知道为什么.有人可以看看并帮助我吗?
更新:显然球阵列有坐标为NaN的球.下面是我将球推到阵列的代码.我不完全确定坐标是如何获得NaN的.
// Variables
var numBalls = 200; // number of balls
var maxSize = 15;
var minSize = 5;
var maxSpeed = maxSize + 5;
var balls = new Array();
var tempBall;
var tempX;
var tempY;
var tempSpeed;
var tempAngle;
var tempRadius;
var tempRadians;
var tempVelocityX;
var tempVelocityY;
// Find spots to place each ball so none start on top of each other
for (var i = 0; i < numBalls; i += 1) { …Run Code Online (Sandbox Code Playgroud) 我想用画布绘制圆圈.这是我的代码:
[MyActivity.java]:
public class MyActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
...
setContentView(new View(this,w,h));
}
}
Run Code Online (Sandbox Code Playgroud)
[View.java]:
public class View extends SurfaceView
{
public View(Context context, int w, int h)
{
super(context);
Canvas grid = new Canvas(Bitmap.createBitmap(h,w, Bitmap.Config.ARGB_8888));
grid. drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
grid.drawCircle(w/2, h/2 , w/2, paint);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我只有黑色的屏幕没有圆圈.为什么它不起作用?怎么解决?
我想根据android中的特定角度旋转图像,有些像指南针...
我有这个代码...它适用于drawPath(),但我想用图像替换路径和绘图的东西..我试图创建一个位图图像,DrawBitmapImage,但图像不像路径一样旋转..任何请帮忙?
public void draw(Canvas canvas) {
double angle = calculateAngle(currentLongitude, currentLatitude, targetLongitude, targetLatitude);
//Correction;
angle-=90;
//Correction for azimuth
angle-=azimuth;
if((getContext() instanceof Activity) && ((Activity)getContext()).getWindowManager().getDefaultDisplay().getOrientation()==Configuration.ORIENTATION_PORTRAIT)angle-=90;
while(angle<0)angle=angle+360;
Rect rect = canvas.getClipBounds();
int height = rect.bottom-rect.top;
int width = rect.right-rect.left;
int left = rect.left;
int top = rect.top;
if(height>width){
top+=(height-width)/2;
height=width;
}
if(width>height){
left+=(width-height)/2;
width=height;
}
float centerwidth = width/2f;
float centerheight = height/2f;
Paint p = new Paint();
p.setColor(color);
p.setStyle(Paint.Style.FILL);
p.setAntiAlias(true);
float startX = left+(float)(centerwidth+Math.cos(deg2rad(angle))*width/3.0);
float startY = top+(float)(centerheight+Math.sin(deg2rad(angle))*height/3.0);
Path path …Run Code Online (Sandbox Code Playgroud) 是否有能力检查在HTML5画布上呈现的对象,就像我们可以在Silverlight Spy中使用Silverlight一样?
如果我使用Chrome元素检查器,我只能检查DOM.
在Android版Chrome版本16和18(至少)有一个错误,报告clientX和clientY不正确.如果页面滚动,clientX/Y则至少该touchstart事件的值将不正确,但不是click事件.这里有一个错误:
https://code.google.com/p/chromium/issues/detail?id=117754
其中包含此示例,您可以自己尝试:http://www.apprisant.com/tab/cd.html
我在这里用canvas做了一个类似的例子:http://codepen.io/simonsarris/full/dJcvn
这些示例适用于其他移动浏览器(包括普通的旧版Android浏览器),但Chrome for Android似乎在滚动时打破了clientX/Y(至少某些)触摸事件.
有趣的是,clientX和clientY并没有click像它们一样打破事件touchstart.
我的问题是,使clientX和clientY在浏览器中一致地工作的最佳解决方法是什么?看来,以抵消window.scrollX和window.scrollY将"解决"的问题,而是一个很好的解决办法需要:
clientX和clientY?window.scrollX/Y是唯一需要在这里完成的事情.这看起来应该有些微不足道,但是在我的Android应用程序中,我使用画布绘制一系列连接在一起的线条.由于某种原因,我的线条非常微弱和薄.我想知道如何让我的线条变粗?这是我的代码..
for(int i=1; i<myArrayListOfValues.size(); i++){
Paint myPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
myPaint.setStrokeWidth(8/*1 /getResources().getDisplayMetrics().density*/);
myPaint.setColor(0xffff0000); //color.RED
canvas.drawLine(myArrayListOfValues.get(i), myArrayListOfValues.get(i), myArrayListOfValues.get(i-1), myArrayListOfValues.get(i-1), myPaint);
}
Run Code Online (Sandbox Code Playgroud)
另一件事是我绘制的线条和圆圈总是黑色的.setColor()似乎从来没有任何效果.我尝试过使用颜色名称(例如color.red)甚至是十六进制值(例如0xffff0000)
每次我使用这个代码都没有画出来.我需要在指定的矩形内绘制一个位图.
canvas.drawBitmap(MyBitmap, null, rectangle, null)
Run Code Online (Sandbox Code Playgroud)
我看过网上但找不到多少帮助.
以下是如何创建圆形的剪裁区域:
Path path = new Path();
path.addCircle(200,200,100,Direction.CW);
c.clipPath(path); // c is a Canvas
Run Code Online (Sandbox Code Playgroud)
现在Canvas上有一个剪裁区域,可以防止在该圆圈范围之外绘制任何东西.但是,如果我想将剪裁区域塑造成甜甜圈(或其他),该怎么办?
我尝试使用创建第二个Path并在其上使用toggleInverseFillType,然后将其添加到原始路径,但这似乎不起作用.
或者,不是使用Path,而是可以创建一个Bitmap用作蒙版,并以某种方式将其设置为Canvas上的剪贴蒙版?
编辑:答案正是我需要一个小的补充.在画布上执行多个操作时,请始终在第一个clipPath调用上使用Op.REPLACE.这将替换该Canvas上的任何现有clipPath.
作为参考,我在这里发现了6个不同的Region.Op值的含义.想象一下有2个圆圈的维恩图."B"是2个圆圈重叠的部分."A"是不重叠的左圆."C"是不重叠的右圆.
c.clipPath(a,Region.Op.REPLACE);
c.clipPath(b,???);
Region.Op.DIFFERENCE -> A..
Region.Op.INTERSECT -> .B.
Region.Op.REPLACE -> .BC
Region.Op.REVERSE_DIFFERENCE -> ..C
Region.Op.UNION -> ABC
Region.Op.XOR -> A.C
Run Code Online (Sandbox Code Playgroud)
"." 表示未绘制的部分.对不起,如果不是特别清楚.没有图形很难很好地描述.