我一直在用Slick2D钻研游戏编程,我开始怀疑从长远来看,知道LWJGL会更有帮助.一方面,Slick2D快速而简单,但似乎LWJGL在具有2D和3D功能的意义上更具适应性.对于那些处于java中间位并且想要制作游戏的人来说,是否值得花费额外的努力来立即学习LWJGL?
在问这个之前我做了很多网上搜索.我不能这样做.这对我来说有点难以理解.那么我如何在与世界位置的身体相对应的右侧屏幕位置绘制图像?感谢名单.
如果有人在同一个障碍面前找到了他,我会发布一个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 …
我正在开发纸牌游戏,目前有一个很好的基础,但是当我在eclipse中运行它时遇到了一个错误.我也使用光滑的2d.
这是控制台的错误.
线程"main"中的异常java.lang.RuntimeException:当前线程中找不到OpenGL上下文.在在org.lwjgl.opengl.GL11.glGetError(GL11.java:1277)在org.newdawn.slick.opengl.renderer.ImmediateModeOGLRenderer.glGetError(ImmediateModeOGLRenderer org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)的.java:387)在org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:337)在org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:275)在org.newdawn.slick.图像.(Image.java:270)在org.newdawn.slick.Image.(Image.java:244)在org.newdawn.slick.Image.(Image.java:232)在org.newdawn.slick.Image. (Image.java:198)在Cards.Card.(Card.java:18)
代码我相信发生错误的来源(卡类)
package Cards;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
public class Card
{
final int numCards = 52;
Image[] card = new Image [numCards];
Card (int c)
{
String fileLocation = new String ();
for (int i = 1 ; i <= 52 ; i++)
{
fileLocation = "res/cards/" + i + ".png";
try
{
card [i] = new Image (fileLocation); //line
}
catch (SlickException e)
{
e.printStackTrace ();
}
}
}
public Image getImage (int cardlocation) …
Run Code Online (Sandbox Code Playgroud) 我有一个项目,我正在使用Java + Scala + Slick2D.
从日食开始,项目本身运行良好.但是当我尝试制作一个jar文件时,它只是拒绝工作.这是我在尝试将其导出为Runnable jar时遇到的错误:
如果我尝试导出只是一个Jar文件,它将无法找到主类:
当然,游戏中有一个主要类.TicTacGame.但它拒绝承认它.我尝试用简单的Hello World项目创建一个可执行文件,它运行正常.它甚至可以检测到主类.为什么Eclipse在这种情况下没有检测到主类?
PS:我还尝试提取创建的.jar文件,编辑manifest.mf文件以添加Main-Class:game.TicTacGame,输入两个新行并重新创建jar.然后它给了我一个损坏的jar文件错误.
我在我的智慧结束,并希望在这方面有任何帮助.我正在使用带有Eclipse Juno,Java 1.7和Scala 2.10的Windows 7 x64
编辑:Main类是Java
由于某种原因,每次我尝试使用 Jenkins 构建项目时,maven 似乎都在尝试下载项目的依赖项。有一些问题。第一个是它根本不应该这样做,另一个问题是它甚至没有尝试从正确的存储库下载它们,这意味着它必须等待它们中的每一个都超时。
我可以自己运行 mvn clean package,它会在大约 4 秒内构建它,因为所有依赖项都在我的本地 .m2 存储库中。Jenkins 安装在本地并共享此 Maven 存储库,所以我不知道为什么它的行为不同。看来 jenkins 正在发出带有 -B 和 -f 标志的 maven 命令,并使用 install 而不是 package,但即使我自己这样做,它也会在几秒钟内完成,而 Jenkins 由于所有超时而需要大约 8 分钟它必须等待。
我标记了 Slick2d 和 lwjgl 库,因为我认为这与它们有关,因为它们不在公共 Maven 存储库中,而且我必须手动将它们的存储库添加到 pom 中。
还值得注意的是,构建完成并成功,唯一的区别是 Jenkins 花费了 8 分钟的超时时间,而我自己则在几秒钟内完成了超时。
另外,当我最初试图弄清楚这一点时,当我尝试手动执行此操作时也会发生这种情况。在我添加 Maven Natives 存储库后,它停止执行此操作,但我不知道为什么 Jenkins 仍在花时间,因为它们共享相同的本地存储库并且
更新:在尝试找出发生了什么之后,我似乎已经将其范围缩小到与 Maven 程序集插件相关,因为如果我从我的 pom 中取出该部分,它就可以正常工作。
这是我的 pom 文件的相关部分:
<repositories>
<repository>
<id>slick</id>
<name>slick</name>
<url>http://slick.cokeandcode.com/mavenrepo</url>
</repository>
<repository>
<id>mavenNatives</id>
<name>Maven Natives Repository</name>
<url>http://mavennatives.googlecode.com/svn/repo</url>
</repository>
<repository>
<id>nolat.org</id>
<name>Nolat</name>
<url>https://raw.github.com/Talon876/repo/master/releases</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId> …
Run Code Online (Sandbox Code Playgroud) 在Slick库(基于LWJGL)中,您可以在加载图像后缩放图像getScaledCopy
,但它将应用消除锯齿.我希望边缘保持粗糙; 我正在制作像素艺术品.我怎样才能做到这一点?
我正在构建这里解释的基本Slick游戏示例:http://slick.cokeandcode.com/wiki/doku.php?id = 01_-_ a_basic_slick_game,我遇到了一些问题.具体来说,游戏编译得很好,但是当我尝试运行它时,Java会抱怨:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1856)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at org.lwjgl.Sys$1.run(Sys.java:75)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.Sys.doLoadLibrary(Sys.java:68)
at org.lwjgl.Sys.loadLibrary(Sys.java:84)
at org.lwjgl.Sys.<clinit>(Sys.java:101)
at org.lwjgl.opengl.Display.<clinit>(Display.java:128)
at org.newdawn.slick.AppGameContainer$1.run(AppGameContainer.java:39)
at java.security.AccessController.doPrivileged(Native Method)
at org.newdawn.slick.AppGameContainer.<clinit>(AppGameContainer.java:36)
at SlickBasicGame.main(SlickBasicGame.java:79)
Run Code Online (Sandbox Code Playgroud)
这是我的源代码:
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
public class SlickBasicGame extends BasicGame{
Image plane = null;
Image land = null;
float x = 400;
float y = 300; …
Run Code Online (Sandbox Code Playgroud) 我的程序在Eclipse中运行良好.但是,如果我尝试将其导出为可运行的jar,则双击时jar不会打开.在Eclipse中,有没有办法直接导出到.app?
我刚决定将Slick2D更改为LibGDX.但是,为了能够将我的游戏移植到LibGDX,我需要帮助了解如何从我的游戏数据文件中创建LibGDX中的纹理.
我的游戏数据文件是加密的,图像是用base64编码的,所以我可以将它们全部保存在一个txt文件中.如何从ByteArrayInputStream创建LibGDX纹理.
在Slick2D中,我将base64字符串转换为bufferedimage.但我不想为LibGDX这样做,因为我可能希望很快就能在Android上获得它.
编辑:我只是想通了,有点儿.我是这样做的:
Texture bucket;
String base64 = "base64 string too long to paste"
byte[] decodedBytes = Base64Coder.decode(base64);
bucket = new Texture(new Pixmap(decodedBytes, 0, decodedBytes.length));
Run Code Online (Sandbox Code Playgroud)
但是,现在图像垂直翻转......我错过了什么吗?
我正在学习Slick2D,它完全符合我的2D Java游戏编程目的.不幸的是,我有一个问题.我不认为它是特定的Slick2D,因为我认为Java Graphics 2D也是如此.
在Ubuntu中(我使用的是Ubuntu 12.04),按Alt键显示"Dash Home",与点击屏幕左上角的图标相同(Windows用户,"Dash Home"是一种"开始"菜单).
当我的应用程序运行时,Alt键仍然有此行为并显示Dash Home.当我的游戏以窗口模式运行时,这不是什么大问题,因为我可以进入暂停状态.然而,当处于全屏模式时,这是一个大问题,因为系统离开全屏并且在全屏和窗口之间切换是耗时的并且粗略地说是丑陋的.
所以,问题是:如何阻止Alt键进入操作系统,防止Dash Home打开?在我的代码中,我通过Game2D提供的监听器处理keyPresses,并且我不调用任何超类方法,因此,通常不应将按键通知给操作系统.但它是.
我没有附加任何代码,因为我认为这与Slick2D无关,而是一般的Java问题.任何的想法?
谢谢!
编辑:问题仍然存在.我已经发布了项目的整个源代码和二进制文件在这里.如果它没有帮助找到解决方案,它可以作为一个关于Java游戏编程的基本教程给其他人.