Java 如何反向绘制数组 @覆盖 受保护的空心油漆组件(最终图形){ super.paintComponent(图形); 最终图形2d g2d=(图形2d)图形; 最终整数高度=getHeight(); 最终整数宽度=getWidth(); 最终int modX=宽度*工件尺寸; 最终int modY=宽度*工件尺寸; g2d.setRenderingHint(RenderingHints.KEY_抗锯齿, RenderingHints.VALUE_ANTIALIAS_ON); //拿分 /*如果(我的游戏状态){ 对于(int y=myBlockList.size()-1;y>0;y--){ 对于(int x=myBlockList.get(y).length-1;x>=0;x--){ setColor(getRandomColor()); if(myBlockList.get(y)[x]!=null){ g2d.drawRect(x*件号,y*件号,件号,件号); g2d.fillRect(x*件号,y*件号,件号,件号); } } } }*/ 如果(我的游戏状态){ 对于(int y=0;yDown
因此,我收到一个ArrayList,它在后端模拟俄罗斯方块,但倒置,因此块是向上移动而不是向下移动。我如何将其倒置绘制,以使碎片向下而不是向上?正如您在我的代码中看到的,我尝试了反向循环和常规循环,两者都产生相同的从下到上的fa样式林Java 如何反向绘制数组 @覆盖 受保护的空心油漆组件(最终图形){ super.paintComponent(图形); 最终图形2d g2d=(图形2d)图形; 最终整数高度=getHeight(); 最终整数宽度=getWidth(); 最终int modX=宽度*工件尺寸; 最终int modY=宽度*工件尺寸; g2d.setRenderingHint(RenderingHints.KEY_抗锯齿, RenderingHints.VALUE_ANTIALIAS_ON); //拿分 /*如果(我的游戏状态){ 对于(int y=myBlockList.size()-1;y>0;y--){ 对于(int x=myBlockList.get(y).length-1;x>=0;x--){ setColor(getRandomColor()); if(myBlockList.get(y)[x]!=null){ g2d.drawRect(x*件号,y*件号,件号,件号); g2d.fillRect(x*件号,y*件号,件号,件号); } } } }*/ 如果(我的游戏状态){ 对于(int y=0;yDown,java,Java,因此,我收到一个ArrayList,它在后端模拟俄罗斯方块,但倒置,因此块是向上移动而不是向下移动。我如何将其倒置绘制,以使碎片向下而不是向上?正如您在我的代码中看到的,我尝试了反向循环和常规循环,两者都产生相同的从下到上的fa样式林 绘制片段的顺序只影响片段在屏幕上的重叠方式。在这种情况下,它们并不重要。因此,顺序并不重要。重要的是如何在其他代码中声明数据,当您更改位置时,您需要向其添加Y,而不是减去Y。基本上,所有计算机图形都是+Y->Down 显示迭代位置的代码,并告诉您将其更改为a+,这
绘制片段的顺序只影响片段在屏幕上的重叠方式。在这种情况下,它们并不重要。因此,顺序并不重要。重要的是如何在其他代码中声明数据,当您更改位置时,您需要向其添加Y,而不是减去Y。基本上,所有计算机图形都是+Y->Down
显示迭代位置的代码,并告诉您将其更改为a+,这很简单。绘制片段的顺序只影响片段在屏幕上的重叠方式。在这种情况下,它们不会重叠。因此,顺序无关紧要。重要的是您在其他代码中如何声明数据以及何时更改位置在上,您需要向它们添加Y,而不是减去Y。基本上,所有计算机图形都是+Y->Down
显示迭代位置的代码,并告诉您将-更改为+。g2d.drawRect负责放置位置。
y*PIECE\u SIZE
专门用于y位置。您需要使用MAX\u y\u value-(y*PIECE\u SIZE)反转y位置
g2d.drawRect负责放置位置。y*工件尺寸
专门用于y位置。您需要使用最大y值(y*工件尺寸)反转y位置
标准化点数据,从一中减去标准化点数据,乘以将容纳碎片的区域的高度,从屏幕顶部添加缓冲区“标准化点数据”是什么意思?如果你不介意,你发布的代码看起来与移动块无关。它只在屏幕上绘制它们。你的两个循环版本改变了绘制块的顺序,但块的位置似乎隐含在显示列表中的位置。你的示例没有显示将块放入列表的代码。若要规范化点,请找到最大y值,并将所有y值除以最大值,使y值的范围为0-1。然后通过从1中减去每个y值来反转y值。这将反转它们“下落”的方向。然后将每个y值乘以块在OK中可以移动的区域的高度,因此我从一个可观察的后端类接收ArrayList,数组列表包含俄罗斯方块板,在它们的点中包含适当的块,包括当它们移动时,ArrayList填满了块。所以我正在做的是迭代ArrayListst,查看哪些块已填充,然后尝试绘制这些块。不幸的是,arraylist的顺序与y相反。规范化点数据,从一个点数据中减去规范化点数据,乘以容纳块的区域的高度,从屏幕顶部添加缓冲区“规范化点数据”是什么意思?如果你不介意,你发布的代码看起来与移动块无关。它只在屏幕上绘制它们。你的两个循环版本改变了绘制块的顺序,但块的位置似乎隐含在显示列表中的位置。你的示例没有显示将块放入列表的代码。若要规范化点,请找到最大y值,并将所有y值除以最大值,使y值的范围为0-1。然后通过从1中减去每个y值来反转y值。这将反转它们“下落”的方向。然后将每个y值乘以块在OK中可以移动的区域的高度,因此我从一个可观察的后端类接收ArrayList,数组列表包含俄罗斯方块板,在它们的点中包含适当的块,包括当它们移动时,ArrayList填满了块。所以我正在做的是迭代ArrayListst,查看哪些块已填充,然后尝试绘制这些块。不幸的是,arraylist的y顺序相反。最大y值到底是什么?我的网格的高度?@Jacob是的。尽管这取决于
@Override
protected void paintComponent(final Graphics theGraphics) {
super.paintComponent(theGraphics);
final Graphics2D g2d = (Graphics2D) theGraphics;
final int height = getHeight();
final int width = getWidth();
final int modX = width * PIECE_SIZE;
final int modY = width * PIECE_SIZE;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
//Get points for pieces
/*if (myGameStatus) {
for (int y = myBlockList.size() - 1; y > 0; y--) {
for (int x = myBlockList.get(y).length - 1; x >= 0; x--) {
g2d.setColor(getRandomColor());
if (myBlockList.get(y)[x] != null) {
g2d.drawRect(x * PIECE_SIZE, y * PIECE_SIZE, PIECE_SIZE, PIECE_SIZE);
g2d.fillRect(x * PIECE_SIZE, y * PIECE_SIZE, PIECE_SIZE, PIECE_SIZE);
}
}
}
}*/
if (myGameStatus) {
for (int y = 0; y < myBlockList.size(); y++) {
for (int x = 0; x < myBlockList.get(y).length; x++) {
g2d.setColor(getRandomColor());
if (myBlockList.get(y)[x] != null) {
g2d.drawRect(x * PIECE_SIZE, y * PIECE_SIZE, PIECE_SIZE, PIECE_SIZE);
g2d.fillRect(x * PIECE_SIZE, y * PIECE_SIZE, PIECE_SIZE, PIECE_SIZE);
}
}
}
}