好的,所以我有这个代码,很明显,渲染方法中的“g = gd”不会修改“g”的字段值。
我怎样才能使渲染方法修改字段g?
我想拥有一个图形字段,所以我可以使用图形在渲染方法之外打印字符串,但我真的不知道该怎么做。
private Graphics g;
private BufferedImage background;
public Tutorial(Core core){
background = core.getResources().getImage(4);
}
public void render(Graphics gd) {
g = gd;
g.drawImage(background, 0, 0, null);
}
编辑:
确定这是全班我如何修改它以便displayMessage可以工作? 在render()之前调用tick(),这可能是个问题吗?
package com.andrewxd.spaceinvaders.levels;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import com.andrewxd.spaceinvaders.main.Core;
public class Tutorial implements Levels{
private Graphics g;
private BufferedImage background;
public Tutorial(Core core){
background = core.getResources().getImage(4);
}
public void render(Graphics gd) {
g = gd;
g.drawImage(background, 0, 0, null);
}
public void tick() {
displayMessage("Welcome", 200,200);
}
public void displayMessage(String message, int x, int y) {
g.setFont(new Font("ARIAL", Font.BOLD, 20));
g.setColor(Color.RED);
g.drawString(message, x, y);
}
public void displayMessage(String message, int x, int y, Font font) {
g.setFont(font);
g.setColor(Color.WHITE);
g.drawString(message, x, y);
}
public void displayMessage(String message, int x, int y, Font font, Color color) {
g.setFont(font);
g.setColor(color);
g.drawString(message, x, y);
}
}
答案 0 :(得分:3)
你不能从void方法返回一个值,这就是void方法的目的,它完成了它的工作并完成了它。
Java是按值传递,当您传递引用类型时,其地址不会更改,但其属性将受更改影响。
答案 1 :(得分:0)
您可以尝试从要修改的工厂类中获取对象...但是无法使用return;在虚空方法......
您应该使用谷歌并找到此案例的最佳做法和模式; - )
答案 2 :(得分:0)
,但您可以更改全局变量的数据。这样你就可以实现它,或者使用其他一些数据类型......
答案 3 :(得分:0)
“void”。
如果你想要它返回一些东西而不是“无效”,请输入你想要返回的类型。例如:
public Graphics returnG(){
Graphics g = new Graphics();
return g;
}
这将返回名为g。
的图形对象但同样,void方法无法返回某些内容。