我最近一直在使用Canvas进行小型Java游戏,我注意到会发生许多奇怪的事情.例如,今天早些时候我创造了一个小游戏,其目标是射击敌舰并获得积分.游戏在屏幕上绘制了微小的32x32图像(有时稍微大一些),并且由于我无视的原因,游戏呈现出奇怪的效果.
例如,我的船上面有一个健康栏:
正如您在图像中看到的那样,纹理非常小.尽管如此,游戏仍然滞后,有时事情会像这样呈现不正确,例如:
如果你仔细观察健康栏的顶部,你可以看到它略微向上移动,它让我感到困惑,因为我的所有渲染都被缓冲了.
我的渲染代码:
public void render(){
BufferStrategy bs = getBufferStrategy();
if(bs == null){
createBufferStrategy(3);
return;
}
Graphics2D g = (Graphics2D)bs.getDrawGraphics();
toDrawG.setColor(new Color(0x222222));
toDrawG.fillRect(0, 0, WIDTH, HEIGHT);
draw((Graphics2D)toDrawG);
g.drawImage(toDraw, 0, 0, null);
g.dispose();
bs.show();
}
public void draw(Graphics2D g){
if(Settings.planets){
renderer.renderPlanets();
}
if(level != null){
for(int i = 0 ; i < level.entityList.size(); i++){
if(level.entityList.get(i) != null){
level.entityList.get(i).render(renderer);
}
}
}
renderer.overlayString("Space Game", 20, 20, 24, 0xFFFFFF);
renderer.overlayString(VERSION, 20, 50, 24, 0xFFFFFF);
renderer.overlayString("FPS: " + renderer.fps, 20, 70, 24, …
Run Code Online (Sandbox Code Playgroud) 我正在为一个游戏做一个聊天响应者,我想知道是否有一种方法可以比较两个字符串,看看它们是否相近于彼此,例如:
如果有人输入:"力量等级?" 它会做一个函数..然后如果有人输入:"Str level?" 它会做同样的功能,但我想它,这样,如果有人做了一个错字或类似的东西,它会自动检测他们试图键入例如什么:"力量tlevel" 也会使函数被调用.
我在这里问的是一些简单的东西,还是需要我做一个巨大的刺激性功能来检查字符串?
如果你对我的解释感到困惑(不是我的优点之一)那么这基本上就是我所要求的.
如何检查两个字符串是否彼此相似?
我有一个10000x10000 BufferedImage
而且我只想把它的一部分画到a Canvas
,有没有办法用args这样做:
x, y, width, height
?
例如,drawImage(img,x,y,width,height)会从图像开始绘制一个矩形,从(x,y)开始,并以(width,height)为维度?
编辑:
我要重新提出这个问题:
我有一个10000x10000的图像,我只想在屏幕上显示它的一部分,只是将它偏移x和y的问题是,这仍然会导致整个图像被渲染时出现延迟,其中大部分都是在画布上.我怎么能基本上这样做才能渲染整个图像,但我可以滚动它而不会导致画布滞后?
我有一个Item[] items
包含一些关于自身的基本统计数据.
public float getAttackDamage() {
float bonus = 0;
for(int i = 0 ; i < items.length; i++){
if(items[i] != null){
bonus += items[i].getAttackDamage();
}
}
return baseAttackDamage + attackDamageScaling * level + bonus;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是我当前循环我的字符项并将它们getAttackDamage()
应用于返回结果的方式.
有没有办法可以重写这个来使用lambda表达式?我试过以下:
public float getAttackDamage() {
float bonus = 0;
Arrays.stream(items).forEach(i -> bonus += i.getAttackDamage());
return baseAttackDamage + attackDamageScaling * level + bonus;
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用(编译器错误).这可能吗?
这可能听起来像一个愚蠢的问题,但实际上是剪贴板?我注意到剪贴板的使用方式比我原先想象的要复杂得多,我的好奇心飙升了.我认为剪贴板基本上跟踪了一串文本,一个图像或一个文件,然后只是将它粘贴到用户指定的任何地方(如果上下文匹配).
然而,对于像MS Word这样的文字处理软件,我注意到你可以直接从网站上复制和粘贴样式,而在skype这样的程序上,你可以在记事本文件中复制看似普通文本的引号,但实际上是skype的ui格式化的注释. .
我看了一个虚假的skype报价生成器的源代码,看起来有多个剪贴板?或者剪贴板是否放置在Key-Value类型的地图中?
这是一个功能:
/**
* Creates an instance of a JLabel with the given arguments
* @param text The text to be displayed on the Label
* @param font The font of the label
* @param bold set to true if you want the label's text to be bold
* @param fontSize The size of the font to be rendered
* @param alignment An alignment (E.g. CENTER_ALIGNMENT)
* @param verticleAlignment an optional argument to allow one to choose the Y alignment
* …
Run Code Online (Sandbox Code Playgroud) 我已经查看了oracle网站,但这对我来说似乎很先进,请有人能给我一个基本的故事来了解java中的>>运算符吗?也许一个基本的例子会很好.
我只是为了好玩而让自己成为一个小小的使者.我想这样做,当你在那里看到某个单词时,例如你的用户名就会变成蓝色.
例如,它看起来像这样:
User1:你好,你好吗?
User2:我很好,谢谢,你呢:)
(粗体=蓝色,不粗体=黑色)
这就是我的客户目前的看法:
无论如何..我希望这些信息足以让您理解我的问题/问题.谢谢 :)
我正在创建一个基本的小游戏,我希望它能够使用套接字扫描局域网,我当前的代码工作,但它是粗糙和缓慢.
我当前的代码就这样工作,它得到当前计算机前2个八度(例如192.168),然后它做一个双for循环(0-255)从192.168.0.0扫描到192.168.255.255,在我看来这是一个非常扫描局域网中所有IP的低效方法.
这是代码:
new Thread(new Runnable() {
@Override
public void run() {
int next = 0;
try{
String ipAd = InetAddress.getLocalHost().getHostAddress();
String ipStart = ipAd.substring(0, NetHandler.nthOccurrence(ipAd, '.', 2)-1);
Socket s;
for(int i = 0 ; i < 255; i++){
for(int j = 0 ; j < 255; j++){
s = new Socket();
String ip = ipStart + (i + "." + j);
tests++;
server = ip;
try{
s.connect(new InetSocketAddress(ip, 26655), 10);
}catch(Exception e){
continue;
}
servers[next++] = ip;
componentList.add(new GuiButton(ids++, …
Run Code Online (Sandbox Code Playgroud)