标签: jbox2d

将物理应用于Android View对象

我目前有一个Android应用程序,利用UI的原生android视图(例如imageviews /按钮等)

虽然这个应用程序不是游戏,也不需要任何繁重的图形或OpenGL,但我想加入一些与物理相关的交互.没有什么太重要但可能显示轻微的碰撞/反弹,减速/加速或可能的摩擦.

这可能是在android框架内模拟或使用像jbox2d这样的外部物理库而不必使用整个游戏引擎(如andengine,libgx等).

PS适用于API 15+

谢谢大家.

android physics box2d jbox2d

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

Slick2D和JBox2D.如何绘制

在问这个之前我做了很多网上搜索.我不能这样做.这对我来说有点难以理解.那么我如何在与世界位置的身体相对应的右侧屏幕位置绘制图像?感谢名单.

如果有人在同一个障碍面前找到了他,我会发布一个HOW TO,而不是正常速度的好解释.你可以在这里找到它:http://romeo.akademx.ro/2012/04/06/slick-and-box2d/

这是渲染功能:

public void render(GameContainer container, StateBasedGame game, Graphics g)
        throws SlickException {
    g.setBackground(Color.white);

    g.pushTransform();
    g.translate(worldToScreen(body.getPosition()).x, worldToScreen(body.getPosition()).y);
    g.rotate(15, 15, (float) Math.toDegrees(body.getAngle()));
    part.draw();
    g.popTransform();

    g.drawString("Count: " + cont, 5, 40);
    //world.drawDebugData();
}
Run Code Online (Sandbox Code Playgroud)

这些是我用来转换世界屏幕协调的功能:

public Vec2 screenToWorld(Vec2 screenV) {
    return new Vec2((screenV.x - offset.x) / scaleFactor, yFlip
            * (screenV.y - offset.y) / scaleFactor);
}

public Vec2 worldToScreen(Vec2 worldV) {
    return new Vec2(worldV.x * scaleFactor + offset.x, yFlip * worldV.y
            * scaleFactor + offset.y);
}
Run Code Online (Sandbox Code Playgroud)

我也碰巧使用此链接中的SlickDebugDraw:http://slick.javaunlimited.net/viewtopic.php?f …

java physics-engine jbox2d slick2d

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

如何防止球在Box2D中粘到墙上?

我正在尝试使用box2d.我似乎有一个问题,人们形容为粘墙

我有一个球和一个球拍

我正在使用我能找到的所有基本推荐尺度,10米世界,1米球

球具有以下特性:

shape: circle (.5f radius)
size: 1.0f
density: 1.0f
restitution: 1.0f
friction: 0.0f
Run Code Online (Sandbox Code Playgroud)

用于移动球的桨是1.5米,它具有以下属性:形状:

circle (.75f radius)
size: 1.5f
density: 10.0f
restitution: 0.1f
friction: 0.0f
Run Code Online (Sandbox Code Playgroud)

如您所见,所有物体的摩擦力均为0.

球不断地沿墙壁滚动或完全卡在90度角落

我以为我可以发现与墙壁发生碰撞并触发applyLinearImpulse将球从墙上移开.

box2d box2d-iphone jbox2d

10
推荐指数
1
解决办法
6305
查看次数

在Box2D中防止身体旋转

我目前正在使用Box2d,更准确地说是Java端口jBox2d.

我有一个圆圈在掉落时与其他圆圈相撞(所有圆圈形成一种曲柄,见下图).

插图

在性质上,圆圈在下降时开始旋转.但我想阻止它旋转,以便摩擦力更高.

java box2d game-physics jbox2d

8
推荐指数
1
解决办法
8424
查看次数

如何从Android相机中找到框架的轮廓并将其转换为box2d实体?

使用OpenFrameworks,OpenCV和Box2D,我能够以良好的帧速率实现它.使用Android似乎是一项更复杂的任务(部分原因是因为我是JAVA新手).

这就是我的开始:

  1. 使用"OpenCV样本 - 图像处理"并删除除"canny"效果之外的所有内容,这样可以生成漂亮的黑白图像,非常适合查找轮廓.

    public Mat onCameraFrame(CvCameraViewFrame inputFrame)
    {
        mRgba = inputFrame.rgba();
        Imgproc.Canny(mRgbaInnerWindow, mIntermediateMat, 50, 100);
        Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4);
    
        return mRgba;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从"OpenCV Sample - color-blob-detection"中我抓住了在Mat中找到轮廓的逻辑:

    // These two lines are actually in the function onCameraViewStarted
    mHierarchy = new Mat();
    CONTOUR_COLOR = new Scalar(255,0,0,255);
    
    // These lines are in function onCameraFrame
    List<MatOfPoint> contours = new ArrayList<MatOfPoint>();        
    Imgproc.findContours(mRgbaInnerWindow, contours, mHierarchy, Imgproc.RETR_EXTERNAL,     
    Imgproc.CHAIN_APPROX_SIMPLE);
    Imgproc.drawContours(mIntermediateMat, contours, -1, CONTOUR_COLOR);
    
    Run Code Online (Sandbox Code Playgroud)

    所以,我当前的函数看起来像这样,它不起作用:

    public Mat onCameraFrame(CvCameraViewFrame inputFrame)
    {
        mRgba = inputFrame.rgba();
    
        if ((mRgbaInnerWindow == null) …
    Run Code Online (Sandbox Code Playgroud)

android opencv computer-vision jbox2d

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

JBox2D - 查找碰撞坐标

我正在使用JBox2D编写Java程序.我需要找到两个纹理之间的确切碰撞点,如果它们碰撞的话.

我有代码来确定是否发生了碰撞,并且显然可以调用碰撞对象ID来确定哪些纹理发生碰撞.

我似乎无法弄清楚如何抓住碰撞本身的实际坐标.我阅读了文档,但它非常复杂,并没有直接解决这个问题.

这是我的代码:

import org.jbox2d.callbacks.ContactImpulse;
import org.jbox2d.callbacks.ContactListener;
import org.jbox2d.collision.Manifold;
import org.jbox2d.common.Vec2;
import org.jbox2d.dynamics.Fixture;
import org.jbox2d.dynamics.contacts.Contact;


public class MyContactListener implements ContactListener{


    //When they start to collide
    public void beginContact(Contact c) {

    System.out.println("CONTACT");

    Fixture fa = c.getFixtureA();
    Fixture fb = c.getFixtureB();

    Vec2 posA = fa.getBody().getPosition();
    Vec2 posB = fb.getBody().getPosition();



}

public void endContact(Contact c) {

}

public void preSolve(Contact c, Manifold m) {}

public void postSolve(Contact c, ContactImpulse ci){}

}
Run Code Online (Sandbox Code Playgroud)

java physics collision box2d jbox2d

7
推荐指数
1
解决办法
405
查看次数

jbox2d教程

你能告诉我:我在哪里可以找到教程"在jbox2d中编程游戏"

java box2d jbox2d

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

如何在Java中检测图像的边缘(透明背景)?

我的图像具有透明背景。我想找到图像的边缘,并从轮廓形成多边形。我可以有多种方法/方式。我想用Java(针对我的游戏,使用JBox2d Polygons进行碰撞检测)来实现。

我已经对此进行了一些思考,并正在考虑如何进行。我可以尝试检测所有透明像素,然后反转选择,仅选择具有1个相邻透明像素的像素。这都是非常复杂的,我需要一些指导。

java image collision-detection jbox2d

5
推荐指数
1
解决办法
1719
查看次数

如何在 libgdx + box2d 中检查身体是否几乎停止移动

所以,我有一个球员身体 + 固定装置等,它本质上是一个弹跳的球。

我想检测它何时“几乎”完成移动。

目前我这样做:

public Boolean isStopped() {
    return body.getLinearVelocity().x <= 0.3f && body.getLinearVelocity().y <= 0.3f;
}
Run Code Online (Sandbox Code Playgroud)

这主要是有效的,问题是当玩家击中某物时,有一瞬间其速度为 0,因此返回 true。我真正想要的是在基本完成时返回 true 。最好在我调整游戏世界物理时可以设置为任何我喜欢的范围内。

我不能检查它是否在睡觉,因为这来得太晚了,直到它停止对它施加力量之后它才会睡觉,我需要之前。

我可以只存储停止的时间/停止的步骤数,但我希望有一个很好的预先存在的方法,但我错过了。

有任何想法吗?

java android box2d jbox2d libgdx

5
推荐指数
1
解决办法
1928
查看次数

使用Intellij + Maven导入库:无法解析符号

我在IntelliJ 13中使用Maven导入了一个库(JBox2D),用于android项目.Maven没有给我任何错误消息,所以我假设库已正确导入.

但是,一旦我尝试使用库中的类,我就会得到"无法解析符号".IntelliJ不像往常那样提供添加import语句的选项.

我该怎么办?

import intellij-idea shared-libraries maven jbox2d

4
推荐指数
1
解决办法
5226
查看次数