我目前有一个Android应用程序,利用UI的原生android视图(例如imageviews /按钮等)
虽然这个应用程序不是游戏,也不需要任何繁重的图形或OpenGL,但我想加入一些与物理相关的交互.没有什么太重要但可能显示轻微的碰撞/反弹,减速/加速或可能的摩擦.
这可能是在android框架内模拟或使用像jbox2d这样的外部物理库而不必使用整个游戏引擎(如andengine,libgx等).
PS适用于API 15+
谢谢大家.
在问这个之前我做了很多网上搜索.我不能这样做.这对我来说有点难以理解.那么我如何在与世界位置的身体相对应的右侧屏幕位置绘制图像?感谢名单.
如果有人在同一个障碍面前找到了他,我会发布一个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 …
我正在尝试使用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,更准确地说是Java端口jBox2d.
我有一个圆圈在掉落时与其他圆圈相撞(所有圆圈形成一种曲柄,见下图).

在性质上,圆圈在下降时开始旋转.但我想阻止它旋转,以便摩擦力更高.
使用OpenFrameworks,OpenCV和Box2D,我能够以良好的帧速率实现它.使用Android似乎是一项更复杂的任务(部分原因是因为我是JAVA新手).
这就是我的开始:
使用"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)从"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)我正在使用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(针对我的游戏,使用JBox2d Polygons进行碰撞检测)来实现。
我已经对此进行了一些思考,并正在考虑如何进行。我可以尝试检测所有透明像素,然后反转选择,仅选择具有1个相邻透明像素的像素。这都是非常复杂的,我需要一些指导。
所以,我有一个球员身体 + 固定装置等,它本质上是一个弹跳的球。
我想检测它何时“几乎”完成移动。
目前我这样做:
public Boolean isStopped() {
return body.getLinearVelocity().x <= 0.3f && body.getLinearVelocity().y <= 0.3f;
}
Run Code Online (Sandbox Code Playgroud)
这主要是有效的,问题是当玩家击中某物时,有一瞬间其速度为 0,因此返回 true。我真正想要的是在基本完成时返回 true 。最好在我调整游戏世界物理时可以设置为任何我喜欢的范围内。
我不能检查它是否在睡觉,因为这来得太晚了,直到它停止对它施加力量之后它才会睡觉,我需要之前。
我可以只存储停止的时间/停止的步骤数,但我希望有一个很好的预先存在的方法,但我错过了。
有任何想法吗?
我在IntelliJ 13中使用Maven导入了一个库(JBox2D),用于android项目.Maven没有给我任何错误消息,所以我假设库已正确导入.
但是,一旦我尝试使用库中的类,我就会得到"无法解析符号".IntelliJ不像往常那样提供添加import语句的选项.
我该怎么办?