小编Sim*_*ris的帖子

为什么我的球消失了?

请原谅这个有趣的头衔.我已经创建了一个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)

javascript geometry physics canvas collision

203
推荐指数
2
解决办法
6574
查看次数

如何在Android中用画布绘制圆圈?

我想用画布绘制圆圈.这是我的代码:

[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)

所以我只有黑色的屏幕没有圆圈.为什么它不起作用?怎么解决?

java android android-canvas

64
推荐指数
4
解决办法
19万
查看次数

如何在HTML5画布上绘制模糊圆圈?

我可以在HTML5画布上绘制一个简单的圆圈,但我想在它周围添加一些模糊.

我发现这个网站解释了shadowBlur这个可以派上用场的房产.

但是,我无法让圆圈变得模糊.该shadowBlur属性基本上是在绘制常规圆后绘制一些模糊效果.到目前为止,我已经尝试过jsFiddle.

可以看出,它是一个实心的圆形,周围有一些模糊效果 - 这两个部分根本不会相互融合.我实际想要实现的是圆圈本身完全模糊如下:

模糊的圈子

有没有办法画出这样的模糊圆圈,即圆圈本身也有模糊效果?

javascript html5 geometry canvas blur

32
推荐指数
2
解决办法
2万
查看次数

在android中的画布上旋转图像

我想根据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)

android angle rotation android-canvas

27
推荐指数
2
解决办法
5万
查看次数

HTML5画布检查器?

是否有能力检查在HTML5画布上呈现的对象,就像我们可以在Silverlight Spy中使用Silverlight一样?

如果我使用Chrome元素检查器,我只能检查DOM.

html5 canvas inspector html5-canvas

25
推荐指数
3
解决办法
3万
查看次数

Chrome for Android的错误clientX和clientY行为的解决方法是什么?

在Android版Chrome版本16和18(至少)有一个错误,报告clientXclientY不正确.如果页面滚动,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.scrollXwindow.scrollY将"解决"的问题,而是一个很好的解决办法需要:

  1. 确定浏览器是否受到影响,最好不要让用户做任何事情,也不要求助于检查userAgent(因此不要对特定浏览器版本做任何假设).换句话说,我们如何知道哪些浏览器有坏值clientXclientY
  2. 只有在那些需要解决的浏览器上才能可靠地解决这个问题(大概只有Chrome for Android及其特定版本,因为未来的版本可能会很好),看起来,抵消window.scrollX/Y是唯一需要在这里完成的事情.

javascript android google-chrome touch dom-events

25
推荐指数
1
解决办法
4700
查看次数

Android画布画线 - 使线条更粗

这看起来应该有些微不足道,但是在我的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)

graphics android drawing draw android-canvas

24
推荐指数
2
解决办法
3万
查看次数

使用方法-canvas.drawBitmap(bitmap,src,dst,paint)

每次我使用这个代码都没有画出来.我需要在指定的矩形内绘制一个位图.

canvas.drawBitmap(MyBitmap, null, rectangle, null)
Run Code Online (Sandbox Code Playgroud)

我看过网上但找不到多少帮助.

graphics android bitmap android-canvas

23
推荐指数
2
解决办法
7万
查看次数

贝塞尔曲线和画布

如何在画布中绘制贝塞尔曲线.我只有起点和终点.我想从起点到终点画线.我怎么能这样做?

android android-canvas

20
推荐指数
2
解决办法
3万
查看次数

在Android上如何制作奇形怪状的剪裁区域?

以下是如何创建圆形的剪裁区域:

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)

"." 表示未绘制的部分.对不起,如果不是特别清楚.没有图形很难很好地描述.

android dalvik masking android-canvas

18
推荐指数
1
解决办法
2万
查看次数