我目前正在为我的菜单系统上的Java游戏,我不知道如何可以从中心的文本Graphics.drawString(),因此,如果我想画一个文本,其中心点是在X: 50和Y: 50,和文字30像素宽,10像素高,文本将从X: 35和开始Y: 45.
在绘制文本之前,我可以确定文本的宽度吗?
然后这将很容易数学.
编辑:我也想知道我是否可以获得文本的高度,这样我也可以垂直居中.
任何帮助表示赞赏!
我很想知道存储this指针的最佳/常用方法WndProc.我知道几种方法,但据我所知,每种方法都有其自身的缺点.我的问题是:
有哪些不同的方式来生成这种代码:
CWindow::WndProc(UINT msg, WPARAM wParam, LPARAM)
{
this->DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
我可以想到Thunks,HashMaps,Thread Local Storage和Window User Data结构.
每种方法的优点/缺点是什么?
代码示例和建议获得的分数.
这纯粹是出于好奇心.使用MFC之后,我一直想知道它是如何工作的,然后开始考虑ATL等.
编辑:我可以HWND在窗口过程中有效使用的最早的地方是什么?它记录为WM_NCCREATE- 但如果您实际进行实验,那不是第一个发送到窗口的消息.
编辑: ATL使用thunk访问此指针.MFC使用HWNDs 的哈希表查找.
我正在Android Studio中创建一个Android应用.当我打开布局编辑器时,我看到布局顶部的灰色"弹出窗口",它表示它
无法解析资源@style/Widget.Holo.Light.ActionMode.Inverse.
当我将"渲染版本"更改为API 15(Android 4.0.3)时会发生这种情况.
它在一分钟前工作,但当我切换回布局时,我才得到这个错误.
编辑:我使用的是AppCompat库.
主题定义如下
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar" />
Run Code Online (Sandbox Code Playgroud)
该应用程序在我运行时工作正常,但在编辑器中无法正确呈现(至少它给出了错误).
如果有人能帮助我,我会很高兴的.谢谢!
android rendering android-appcompat android-resources android-actionmode
我正在创建一个应用程序,当我构建它并在我的手机上启动它(带有Android 4.4.4的Sony Xperia Z1)时,标题栏不会显示.所有活动都在没有标题栏的情况下呈现,如下所示:

我正在使用Android Studio,在编辑器中,标题栏可见.它只是在运行应用程序时不起作用.
所有帮助都表示赞赏!
我正在用JavaFX创建一个简单的文本编辑器.
我发现我可以通过使用添加菜单项的快捷方式
MenuItem.setAccelerator(KeyCombination.keyCombination("Ctrl+S"))
Run Code Online (Sandbox Code Playgroud)
我将把它用于MenuItem我的应用程序中经常使用的s,例如Save,Open等.只要我只使用两个键,例如Ctrl+ S,这个工作正常,但我也想用三个键创建一些组合,例如Save All选项,在许多程序中都有快捷键Ctrl+ S+ A(与Save相同,但有一个额外的A,逻辑上代表All).
这带来了一个问题.
JavaFX不允许我使用该KeyCombination.keyCombination(String)方法使用两个以上的键.我运行应用程序时遇到错误.
我一如既往地使用谷歌,但我找不到任何关于使用两个以上密钥的信息,所以我决定在这里提问.
我想知道如何设置两个以上的密钥(我目前需要三个)作为MenuItemJavaFX中的一个快捷方式.
我正在创建一个Android应用程序,我想列出目录中的文件.我是通过打电话来做的
File[] files = path.listFiles(new CustomFileFilter());
Run Code Online (Sandbox Code Playgroud)
path是一个File通过调用创建的对象
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
Run Code Online (Sandbox Code Playgroud)
当我然后files通过调用尝试获取数组的长度
int length = files.length;
Run Code Online (Sandbox Code Playgroud)
这行给了我一个NullPointerException,因为files是null.
我已经path通过调用检查了我是否尝试列出存在的文件
System.out.println("Path exists: " + path.exists());
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,它会打印出来
Path exists: true
Run Code Online (Sandbox Code Playgroud)
在Android Studio控制台中,因此该目录存在.
我还打印了路径名称,即
/storage/emulated/0/Download
Run Code Online (Sandbox Code Playgroud)
所以这path是一个目录,而不是一个文件.
我不知道为什么我会得到一个NullPointerException,因为这path是一个目录.
编辑:CustomFileFilter该类看起来像这样:
public class CustomFileFilter implements FileFilter {
// Determine if the file should be accepted
@Override
public boolean accept(File file) {
// If the file isn't a …Run Code Online (Sandbox Code Playgroud) 我正在为我的2D游戏创建一个世界生成器,该生成器使用Java中的Diamond-Square算法,并且听说它仅在2 n +1(幂)个数下有效(或至少有效)二)。
用调用生成世界的方法generateWorld(width, height),但是会产生问题。我希望能够输入a ,如果输入宽度不是width,该函数将找到最接近的数字,该数字是2的幂。我真的不知道该怎么做,因此非常感谢所有帮助!
总结:如果一个数不是2功率,我想找到最近的号码的那一个,这是二的幂。
我最近又向Android Studio安装了一个Android SDK,SDK版本4.4(API级别19),在我的项目中使用它之后,它mipmap在项目的res文件夹(res/mipmap)中添加了一组文件夹.
我既不明白为什么,也不知道如何使用它们.
mipmap文件夹仅用于放置应用程序图标.您使用的任何其他可绘制资产应像以前一样放在相关的可绘制文件夹中.
根据谷歌的这篇博文:
最好将应用程序图标放在mipmap文件夹(而不是drawable文件夹)中,因为它们的分辨率与设备的当前密度不同.
我仍然没有理由这样做.
为什么我们不能将应用程序图标也放在res/drawable文件夹中呢?
此外,如果只应在应用程序图标中放置应用程序图标mipmap,如何创建其他可绘制资源并drawable使用Android Studio图像资源向导将它们放在文件夹中?(通过右键单击项目,选择New> Image Asset)进行访问
我正在创建一个Android应用程序,我正在从文本文件中读取一些坐标.
我正在使用Integer.parseInt(xCoordinateStringFromFile)将X坐标转换为整数,并以与Y坐标相同的方式转换.
当我运行应用程序时,我在该行上出现错误,如下所示:
BridgeData data = new BridgeData(
elements[0],
elements[1],
Integer.parseInt(elements[2]),
Integer.parseInt(elements[3]),
Integer.parseInt(elements[4]),
new GeoPos(Integer.parseInt(elements[5].split(",")[0]), Integer.parseInt(elements[5].split(",")[1])),
new GeoPos(Integer.parseInt(elements[6].split(",")[0]), Integer.parseInt(elements[6].split(",")[1])),
Integer.parseInt(elements[7]),
Integer.parseInt(elements[8])
);
Run Code Online (Sandbox Code Playgroud)
该变量elements是一个String数组,通过在每个上分割当前行来创建;.
"主要"错误是:
java.lang.NumberFormatException: Invalid int: "3546504756"
Run Code Online (Sandbox Code Playgroud)
我想知道这意味着什么,以及我如何解决它.
我正在尝试访问BufferedImage使用文件加载的像素ImageIO.read(filePath),但是我收到此错误:
Exception in thread "Game" java.lang.ClassCastException: java.awt.image.DataBufferByte cannot be cast to java.awt.image.DataBufferInt
at com.package.graphics.Texture.<init>(Texture.java:29)
at com.package.graphics.Texture.loadTexture(Texture.java:40)
at com.package.Game.run(Game.java:71)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
在代码中,错误所在的行位于构造函数中,如下所示:
// Get the pixel array from the BufferedImage
this.pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
Run Code Online (Sandbox Code Playgroud)
据我了解,BufferedImage不是类型BufferedImage.TYPE_INT_RGB或BufferedImage.TYPE_INT_ARGB.因为我在游戏的其余部分使用这些类型,我想知道是否有一种方法可以将加载的图像从它加载的类型转换为另一种类型.
在我的情况下,我想将图像类型转换为BufferedImage.TYPE_INT_ARGB.
我有一个班级订单(我减少了较小尺寸的制定者和吸气剂).
class Order implements Comparable<Order>{
private int number;
private int price;
private int quantity;
private boolean isMarketOrder;
private boolean isBuyOrder;
@Override
public int compareTo(Order o) {
int value1 = Boolean.compare(this.isMarketOrder(), o.isMarketOrder());
if (value1 != 0){
return value1;
}
int value2 = Integer.compare(this.getPrice(),(o.getPrice()));
if (value2 != 0) {
return value2;
}
int value3 = Integer.compare(this.getNumber(),(o.getNumber()));
return value3;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一份订单清单:
public static ArrayList<Order> buyOrders = new ArrayList<Order>();
Run Code Online (Sandbox Code Playgroud)
我做
Collections.sort(buyOrders);
Run Code Online (Sandbox Code Playgroud)
排序时我想要使用的规则:
实际发生的事情是价格较高的商品首先出现,isMarketOrder == true商品是最后的.
这是为什么?
我需要检查纬度坐标 ( A) 是否在另外两个纬度坐标 (B和C) 之间。但是,重点A不一定要在线上B->C。
参考这张图,这里A应该算作“介于”B和C:
我怎样才能做这个计算?
PS:位置可以转换为SWEREF99TM,这是一个网格系统,如果这样计算更好。我已经有了该转换的公式。