- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,Stackoverflow,你是我现在的最后一行。
如果您看一下下面的代码和图片,您会发现有两个文件被立即命名
瓷砖.java
TileMap.java
有关这些类(class)的更多信息,请 Google“ForeignGuyMike Dragon Tale 教程第 8 部分”以获取该项目的下载文件。我现在正在参加他的瓷砖阅读类(class),因为这对我的努力似乎非常有效。切换到 BufferedImage 数组的原因是允许每个图 block 都有动画,截至目前它确实可以处理包含超过 1 帧的图像。
现在这两个类:它们被故意设置为不通过图像进行动画处理,只是为了显示它们打破了该程序,并且没有合并我的成像动画功能。
他们在这里
public class TileMap {
// position
private double x;
private double y;
// bounds
private int xmin;
private int ymin;
private int xmax;
private int ymax;
private double tween;
// map
private int[][] map;
private int tileSize;
private int numRows;
private int numCols;
private int width;
private int height;
// tileset
private BufferedImage[] tileset;
private int numTilesAcross;
private Tile[][] tiles;
private Animation an;
// drawing
private int rowOffset;
private int colOffset;
private int numRowsToDraw;
private int numColsToDraw;
public TileMap(int tileSize) {
this.tileSize = tileSize;
numRowsToDraw = GamePanel.HEIGHT / tileSize + 2;
numColsToDraw = GamePanel.WIDTH / tileSize + 2;
tween = 0.07;
an = new Animation();
}
public void loadTiles(BufferedImage[] s, int delay) {
an.setDelay(delay);
an.setFrames(s);
try {
tileset = s;
numTilesAcross = tileset[0].getWidth() / tileSize;
tiles = new Tile[2][numTilesAcross];
BufferedImage[] subimage = new BufferedImage[s.length];
for(int col = 0; col < numTilesAcross; col++) {
subimage[0] = tileset[0].getSubimage(
col * tileSize,
0,
tileSize,
tileSize
);
tiles[0][col] = new Tile(subimage[0], Tile.NORMAL);
subimage[0] = tileset[0].getSubimage(
col * tileSize,
tileSize,
tileSize,
tileSize
);
tiles[1][col] = new Tile(subimage[0], Tile.BLOCKED);
}
}
catch(Exception e) {
e.printStackTrace();
}
}
public void loadMap(String s) {
try {
InputStream in = getClass().getResourceAsStream(s);
BufferedReader br = new BufferedReader(
new InputStreamReader(in)
);
numCols = Integer.parseInt(br.readLine());
numRows = Integer.parseInt(br.readLine());
map = new int[numRows][numCols];
width = numCols * tileSize;
height = numRows * tileSize;
xmin = GamePanel.WIDTH - width;
xmax = 0;
ymin = GamePanel.HEIGHT - height;
ymax = 0;
String delims = "\\s+";
for(int row = 0; row < numRows; row++) {
String line = br.readLine();
String[] tokens = line.split(delims);
for(int col = 0; col < numCols; col++) {
map[row][col] = Integer.parseInt(tokens[col]);
}
}
}
catch(Exception e) {
e.printStackTrace();
}
}
public int getTileSize() { return tileSize; }
public double getx() { return x; }
public double gety() { return y; }
public int getWidth() { return width; }
public int getHeight() { return height; }
public int getType(int row, int col) {
int rc = map[row][col];
int r = rc / numTilesAcross;
int c = rc % numTilesAcross;
return tiles[r][c].getType();
}
public void setTween(double d) { tween = d; }
public void setPosition(double x, double y) {
this.x += (x - this.x) * tween;
this.y += (y - this.y) * tween;
fixBounds();
colOffset = (int)-this.x / tileSize;
rowOffset = (int)-this.y / tileSize;
}
private void fixBounds() {
if(x < xmin) x = xmin;
if(y < ymin) y = ymin;
if(x > xmax) x = xmax;
if(y > ymax) y = ymax;
}
public void update() {
an.update();
}
public void draw(Graphics2D g) {
for(
int row = rowOffset;
row < rowOffset + numRowsToDraw;
row++) {
if(row >= numRows) break;
for(
int col = colOffset;
col < colOffset + numColsToDraw;
col++) {
if(col >= numCols) break;
if(map[row][col] == 0) continue;
int rc = map[row][col];
int r = rc / numTilesAcross;
int c = rc % numTilesAcross;
g.drawImage(
tiles[r][c].getImage(),
(int)x + col * tileSize,
(int)y + row * tileSize,
null
);
}
}
}
public class Tile {
private BufferedImage image;
private int type;
// tile types
public static final int NORMAL = 0;
public static final int BLOCKED = 1;
public Tile(BufferedImage image, int type) {
this.image = image;
this.type = type;
}
public BufferedImage getImage() { return image; }
public int getType() { return type; }
现在这是实现更改后的代码
变更集:
瓷砖.java
-构造函数参数已从 BufferedImage 更改为 BufferedImage[]
-BufferedImage图像到BufferedImage[]图像;
-getImage 到 getImage(int i) { return image[i]; }
TileMap.java
-初始化子图像并将其设置为BufferedImage[s.length];
-删除所有子图像[0]到子图像
-draw 中的 getImage 现在是 getImage(0);//硬编码
之后
public class TileMap {
// position
private double x;
private double y;
// bounds
private int xmin;
private int ymin;
private int xmax;
private int ymax;
private double tween;
// map
private int[][] map;
private int tileSize;
private int numRows;
private int numCols;
private int width;
private int height;
// tileset
private BufferedImage[] tileset;
private int numTilesAcross;
private Tile[][] tiles;
private Animation an;
// drawing
private int rowOffset;
private int colOffset;
private int numRowsToDraw;
private int numColsToDraw;
public TileMap(int tileSize) {
this.tileSize = tileSize;
numRowsToDraw = GamePanel.HEIGHT / tileSize + 2;
numColsToDraw = GamePanel.WIDTH / tileSize + 2;
tween = 0.07;
an = new Animation();
}
public void loadTiles(BufferedImage[] s, int delay) {
an.setDelay(delay);
an.setFrames(s);
try {
tileset = s;
numTilesAcross = tileset[0].getWidth() / tileSize;
tiles = new Tile[2][numTilesAcross];
BufferedImage[] subimage = new BufferedImage[s.length];
for(int col = 0; col < numTilesAcross; col++) {
subimage[0] = tileset[0].getSubimage(
col * tileSize,
0,
tileSize,
tileSize
);
tiles[0][col] = new Tile(subimage, Tile.NORMAL);
subimage[0] = tileset[0].getSubimage(
col * tileSize,
tileSize,
tileSize,
tileSize
);
tiles[1][col] = new Tile(subimage, Tile.BLOCKED);
}
}
catch(Exception e) {
e.printStackTrace();
}
}
public void loadMap(String s) {
try {
InputStream in = getClass().getResourceAsStream(s);
BufferedReader br = new BufferedReader(
new InputStreamReader(in)
);
numCols = Integer.parseInt(br.readLine());
numRows = Integer.parseInt(br.readLine());
map = new int[numRows][numCols];
width = numCols * tileSize;
height = numRows * tileSize;
xmin = GamePanel.WIDTH - width;
xmax = 0;
ymin = GamePanel.HEIGHT - height;
ymax = 0;
String delims = "\\s+";
for(int row = 0; row < numRows; row++) {
String line = br.readLine();
String[] tokens = line.split(delims);
for(int col = 0; col < numCols; col++) {
map[row][col] = Integer.parseInt(tokens[col]);
}
}
}
catch(Exception e) {
e.printStackTrace();
}
}
public int getTileSize() { return tileSize; }
public double getx() { return x; }
public double gety() { return y; }
public int getWidth() { return width; }
public int getHeight() { return height; }
public int getType(int row, int col) {
int rc = map[row][col];
int r = rc / numTilesAcross;
int c = rc % numTilesAcross;
return tiles[r][c].getType();
}
public void setTween(double d) { tween = d; }
public void setPosition(double x, double y) {
this.x += (x - this.x) * tween;
this.y += (y - this.y) * tween;
fixBounds();
colOffset = (int)-this.x / tileSize;
rowOffset = (int)-this.y / tileSize;
}
private void fixBounds() {
if(x < xmin) x = xmin;
if(y < ymin) y = ymin;
if(x > xmax) x = xmax;
if(y > ymax) y = ymax;
}
public void update() {
an.update();
}
public void draw(Graphics2D g) {
for(
int row = rowOffset;
row < rowOffset + numRowsToDraw;
row++) {
if(row >= numRows) break;
for(
int col = colOffset;
col < colOffset + numColsToDraw;
col++) {
if(col >= numCols) break;
if(map[row][col] == 0) continue;
int rc = map[row][col];
int r = rc / numTilesAcross;
int c = rc % numTilesAcross;
g.drawImage(
tiles[r][c].getImage(0), // hard code the image at 0
(int)x + col * tileSize,
(int)y + row * tileSize,
null
);
}
}
}
public class Tile {
private BufferedImage[] image;
private int type;
// tile types
public static final int NORMAL = 0;
public static final int BLOCKED = 1;
public Tile(BufferedImage[] image, int type) {
this.image = image;
this.type = type;
}
public BufferedImage getImage(int i) { return image[i]; }
public int getType() { return type; }
最佳答案
对于任何想知道答案的人来说,这个问题已经解决了。
该部分
BufferedImage[] subimage = new BufferedImage[s.length];
for(int col = 0; col < numTilesAcross; col++) {
subimage[0] = tileset[0].getSubimage(
col * tileSize,
0,
tileSize,
tileSize
);
tiles[0][col] = new Tile(subimage, Tile.NORMAL);
subimage[0] = tileset[0].getSubimage(
col * tileSize,
tileSize,
tileSize,
tileSize
);
tiles[1][col] = new Tile(subimage, Tile.BLOCKED);
}
是罪魁祸首。感谢 haraldk 提供的测试此问题的建议,解决方法是将子图像简单地放置在循环中。不断更改内容并使用相同的数组只是将其最后一个内容存储在整个数组中,从而将其搞乱。
更新的代码示例
for(int col = 0; col < numTilesAcross; col++) {
BufferedImage[] subimage = new BufferedImage[s.length];
subimage[0] = tileset[0].getSubimage(
col * tileSize,
0,
tileSize,
tileSize
);
tiles[0][col] = new Tile(subimage, Tile.NORMAL);
subimage[0] = tileset[0].getSubimage(
col * tileSize,
tileSize,
tileSize,
tileSize
);
tiles[1][col] = new Tile(subimage, Tile.BLOCKED);
}
关于java - BufferedImage 到 BufferedImage 数组,图 block 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34034572/
我使用 vanilla JS 通过 AJAX 向数据库发送请求。数据写入数据库没有问题。在刷新页面之前,我看不到被放入数据库中的内容。当我删除内容时也会发生同样的情况,我必须刷新才能看到内容消失了。
抱歉,这篇文章很长,我试图提供所有信息并解释我已经尝试过的内容。 问题: 我将经典的 Phoenix View 放入实时 View 中。虽然一切看起来都很好,但 echart 一完成绘制就消失了。好像
搜索了一下,没有找到我要找的东西。我有两个按钮,单击一次即可拉出两个不同的选择框,第二次单击它们就会消失。但是,我希望选择框 1 在单击按钮 2 时消失,反之亦然:选择框 2 将在单击按钮 1 时消失
我正在尝试使用自动布局使用“浮动”标题构建滚动视图。更确切地说,我正在尝试建立包含几列的日历视图。这些列中的每个列都应具有自己的标题,该标题应浮动在顶部,而该列可以垂直滚动到其下方。 如果一切正常,则
我正在尝试模仿星星背景。 星星是在加载时创建并随机散布在整个网站上的。到目前为止我已经调整了一些代码。 var star="•"; var numStars=100; for(var x=1;x•";
我查遍了整个网络,但找不到解决方案。我对 jQuery 也很陌生。 我的案例: 我有一个导航栏,其中的每个链接都会激活/触发一个megamenu(每个链接都有自己的megamenu)。 我需要什么:
我有一个可扩展的 ListView ,当我点击一行时,它会触发 onChildClick 或 onGroupClick,具体取决于我点击的是子项还是组。 如果我在 xml 布局文件中添加可点击的内容(
在我的程序中,我有一个 NSMutableData 变量,用于收集来自 http://www.nhara.org/scored_races-2013.htm 的信息。 .大约第三次从网站获取信息后,当
我一直在完美地使用 Genymotion,但是从最近几天开始我的 Genymotion 并打开它的 GPS 开始,我的 Genymotion 突然消失了。但是我的 eclipse 显示 Genymot
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
所以我的 Item::return_all() 有问题,因为我在 main.cpp 中调用它。早些时候我在 read_file() 和 for (auto data : example_item) 中
所有 UITableCells 在 UITableView 中滚动和触摸时消失。一切都以编程方式完成,我使用标准的 UITableViewCell 类。 我在某处读到包含我的单元格数据的数组可能被清空
我对 Swift 还很陌生。我的问题是我的 UICollectionView 正在消失。在 Xcode 中,它显示一切就绪,但当我在模拟器或设备上启动时,它消失了,只剩下导航栏和标签栏。 有谁知道是什
这是 this one的续题。较早的问题是在复选框上。但是后来我根据要求把check box改成了radio buttons。 现在我需要显示子单选按钮并在母单选按钮处于事件状态时更改背景颜色。一旦它
我用 JS 写了一个简单的脚本。当我将它放入 html 文档(在 body 标签的底部)时,它工作正常。当我尝试将它放入外部文档并链接它时,脚本运行但 canvas 元素消失(刚刚检查:当我将脚本放在
我正在尝试创建一个带有固定元素的滚动页面,当用户向下滚动页面时,该元素“始终”可见。例如,带有道路背景的汽车图像。因此,当用户向下滚动页面时,汽车看起来就像在路上行驶。虽然汽车出现在道路的顶部,但它必
这个问题在这里已经有了答案: How can I change CSS display none or block property using jQuery? (15 个答案) 关闭 4 年前。
我在市场上有一个支持小部件的应用程序。我对应用程序进行了一些重大更改,重新设计了很多内部结构,替换/重命名 Activity 等。其他更改包括从不同的共享首选项键获取小部件配置数据,尽管我已经编写了转
我有一个 fragment alertsfragment.java,它有一个 GridView 布局,当我打开它时,它工作正常,但是当我在其他选项卡之间滑动时,它就消失了。为了解释更多,我有一个 Ac
我是一名优秀的程序员,十分优秀!