Articles of Java

使用Stage和GestureDetector?

如何将两个input处理器合并到一个项目中? 我的项目与这个人的教程中的项目类似: http://www.kilobolt.com/day-11-supporting-iosandroid–splashscreen-menus-and-tweening.html 我正在考虑使用input多路复用器,包括一个手势检测器和一个舞台。 我也有一个演员在场,它的精灵渲染得很好。 问题是,当我点击,没有任何反应。 我试过debugging,我注意到Stage参数是空的。 使用input多路复用器不明智吗? 我现在没有关于我的代码,但是我想知道是否可以得到一个概念性的回应,我可以帮助我弄清楚如何将两者结合在一起,并举一些例子。

生成质量二进制迷宫

编辑2:去一个不同的方法,不能得到它与这种技术的工作。 编辑1:是否有可能开始全零,然后#在一些随机的地方每次都会代表某种障碍的迹象,然后尝试部署A *searchalgorithm,以find围绕顶部障碍的最短path左边,右下方? 另一个想法。 我正在尝试生成一个二进制(零一)二维数组迷宫,并不总是最简单的(始终返回相同的最短path距离)。 它被那些路过,零的墙壁淹没了。 到目前为止,我已经达到了这个代码随机走在二维数组零,并产生一定的坐标。 该function检查以前的方向,使走路不会回到那个方向,而是从其他三个方向select。 有一个想法,我会检查是否有任何在我们正在做的举动的两个方块的半径,如果不是,我们应该鼓励做出这样的行动,以尽可能zigzaggy和代表围墙之间的0块。 我将如何改进这个解决scheme或实现我的想法? 我试过了,没有成功。 我想要它是什么(一个6×6迷宫的例子) 现在返回的方法是什么(一个10×10迷宫的例子) 代码如下: import java.util.*; public class DrunkardTest { public static void main(String[] args) { Drunkard drunkard = new Drunkard(0, 0); drunkard.report(); boolean done = false; int previous = 0; while(!done) { int move = drunkard.nextDirection(drunkard.x, drunkard.y, 9, 9, previous); previous = move; drunkard.report(); […]

无法让Box2d灯投射阴影

我正在尝试使用box2dlight为我的游戏添加灯光,并且除了我无法使用box2d主体投射阴影外,我还有其他一切工作。 我也有碰撞工作使用category / maskBits与我的各种对象,我试图应用相同的策略box2dlightfilter。 你可以看到光线是如何通过身体。 编辑:我想我可能已经发现为什么灯不与我的box2d机构相撞。 当我使用“真实世界”尺度像素坐标定义身体形状时,灯光会正确投射阴影,但由于身体是以像素比例定义的,而不是我定义的box2d比例,所以我失去了碰撞。 有谁知道为什么box2dlights正在使用真实世界的规模? 这是我的RayHandler安装程序 RayHandler.useDiffuseLight(false); rayHandler = new RayHandler(world); rayHandler.setAmbientLight(.5f, .5f, .2f, 1f); rayHandler.setBlurNum(1); rayHandler.setShadows(true); 我有一个位于屏幕中心的PointLight。 PointLight pl = new PointLight(game.rayHandler, 128); pl.setDistance(1000); pl.setPosition(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2); pl.setColor(Color.WHITE); pl.setSoftnessLength(0); Filter filter = new Filter(); filter.categoryBits = B2DVars.CATEGORY_LIGHT; // Value listed below filter.maskBits = B2DVars.MASK_LIGHT; // Value listed below […]

Libgdx着色器TMX

我一直在为世界地图添加着色器而苦苦挣扎。 因为我想在这个世界上有夜晚,所以我偶然发现了着色器。 我得到的问题是,着色器只适用于玩家,而不是世界地图。 同样奇怪的是玩家之下的地面变黑了。 我用这个教程: http : //www.gamefromscratch.com/post/2014/07/08/LibGDX-Tutorial-Part-12-Using-GLSL-Shaders-and-creating-a-Mesh.aspx用第一个例子简单的接近。 public void render(float deltaTime) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); game.batch.setProjectionMatrix(camera.combined); camera.position.set(player.getPosition().x, player.getPosition().y, 0); camera.update(); game.batch.setShader(shader); mapRenderer.setView(camera); mapRenderer.render(); game.batch.flush(); game.batch.begin(); game.batch.draw(player.getTexture(), player.getPosition().x, player.getPosition().y, 32 / game.UNIT_SCALE, 32 / game.UNIT_SCALE); game.batch.end(); }

libGDX,box2d,Ashley ECS – 使用Box2d进行碰撞检测在使用Ashley ECS组件时不起作用

我刚刚在searchlibGDX wiki的教程时学到了Ashley ECS,我用Ashley ECS组件取代了代码的许多方面,但是,我遇到了一个问题,那就是我似乎无法解决。 问题是我也在使用box2D作为我的游戏的物理/碰撞检测方面,而我遇到的问题是,当我在我的WorldGen类中声明我的box2D World并继续在我的Ashley中使用该variablesECS系统中,碰撞检测在我的地图和我的实体(如玩家)之间的物体之间被破坏。 另外,使用该系统的两个实体的碰撞检测不起作用。 这里是代码: 在WorldGen中: world = new World(new Vector2(0f, 0f), true); … //Instance of an entity in the world entityManager.createEntity(new Vector2(500, 500), SpriteSheet.npcSpriteSheet, true, "Billy", MobType.VILLAGER, TitleTypes.PEASANT, this.getWorld(), body, 10, BodyDef.BodyType.StaticBody, "npc1_1/"); 在我的EntityManager中: public Entity createEntity (Vector2 position, TextureAtlas atlas, boolean isRenderable, String mobName, MobType mobType, TitleTypes title, World world, […]

LIBGDX – 作为演员的孩子的小组?

我已经看过论坛,文档和代码,我认为这不是现在可能的,但也许我错过了一些东西,所以只是为了确保:是否有一种方法来设置一个组作为孩子和演员? 或者换句话说,我该如何创建一个演员层次? 我试图做一个战略游戏,我有“帝国”,“王国”,“城市”,“建筑物”,“人”,“对象”的东西,我想最初也许会是一个好主意让这些东西变成演员,但是我在Actor类或者addGroup里找不到像addActor这样的东西,似乎没有办法让“王国”拥有“城市”,“城市”拥有“建筑物”让演员有孩子演员或小组。

用于游戏插件的运行时Java模块生成

编辑:澄清: 我想在运行时创建一个命名的模块,并将dynamic加载的类放入创建的模块中。 我正在尝试构建一个允许与Java 9的模块系统兼容的代码生成框架。 我需要能够将一些生成的字节码加载到“虚拟”模块中。 从我看到的Java代码后面可以看出,没有任何导出和公共方法可以让我做这样的事情,但是我相信我错过了一些东西。 举个例子,假设这个类是为模块“handler”生成的。 package handler; public class ModHandler{ public static String fireEvent(){ return "This is a string from the generated module!"; } } 我如何使“处理程序”模块并加载字节码? 你将如何添加出口和要求到模块? 我不想写任何东西到磁盘来实现这一点。

手势检测坐标未与视口同步

我正在尝试从GestureDetector实现泛(float x,float y,float deltaX,float deltaY)。 我将纹理的坐标设置为泛的参数,所以每当我拖动纹理在屏幕上绘制那里。 它工作完美。 现在,我在屏幕上放置了一个摄像头和一个视口,突然间,纹理没有正确跟踪拖动坐标。 这里是我初始化我的相机和视口的create()方法 @Override public void create () { batch = new SpriteBatch(); img = new Texture("badlogic.jpg"); pos = new Vector2(0,0); camera = new OrthographicCamera(); camera.position.set(width/2,height/2,0); viewport = new StretchViewport(width,height,camera); viewport.apply(); gestureDetector = new GestureDetector(this); Gdx.input.setInputProcessor(gestureDetector); } 这里是我如何从界面实现泛方法 @Override public boolean pan(float x, float y, float deltaX, float deltaY) […]

在定时Libgdx之后停止animation

有一个TextButtonbutton,还有一个animation的pinAnimation 。 我也不能理解如何实现“淡入淡出的animation”(即当button被点击时,animation开始,并且在一段时间之后,逐渐停止)。 代码示例: @Override public void create(){ textureAtlas = new TextureAtlas("pack.atlas"); stage = new Stage(new ScreenViewport()); sb = new SpriteBatch(); final TextButton button = new TextButton("Start",skin , "default"); button.setWidth(220); button.setHeight(50); button.addListener(new ClickListener(){ @Override public void clicked(InputEvent event, float x, float y) { spinAnimation.setFrameDuration(0.5f); int i = 0; } }); stage.addActor(button); Gdx.input.setInputProcessor(stage); } @Override public […]

存储和记忆最短的path

我做了一些工作后更新了代码,现在知道如何find迷宫中最短path的距离。 我正在使用这个作为我的适应度函数来处理一个进化algorithm来生成迷宫。 这是一个变化的随机x和y的墙的变化是不够的,我想我可以通过复制父母和closures解决scheme的path,然后在地图上的其他地方打开另一条path,可以改变孩子。 为此,我将不得不以某种方式存储我们在最短path解决scheme中所经过的点 (节点)。 任何想法如何在MazeSolver类中做到这一点? 哦, maze.getCell()和maze.setCell()只是设置特定位置的距离(这是一个int数组的二维数组,用于存储从开始的距离) public class MazeSolver { public int counter = 0; Maze maze; public MazeSolver(Maze maze) { this.maze = maze; } public int shortestPath() { int DistanceFromStart = Integer.MAX_VALUE; Queue<Point> Q = new Queue<Point>(); Point current = new Point(0,0); Q.enqueue(current); while (!Q.isEmpty()) { boolean canMove = false; current = […]