我正在写容易的太空入侵者,并且在移动船只时遇到问题。基本上我先改变船的位置,然后再改变repaint()
。如果变化很大,那就更像是跳跃而不是移动。如果更改很小,则动画会更平滑,但会变得更慢。有什么解决办法吗?
我正在使用JPanel并使用paintComponent()
。
@edit:我不太了解我的电脑如何流畅地显示普通(新)游戏,而简单的绘图图像的帧率却很低。这就是为什么我认为这是软件问题而不是硬件问题。因此,也许我做了一些会影响帧速率的事情。
@edit:好的,粘贴了一些代码,但要理解-我从Java开始,大约在2周前开始对图形进行编程。
package pl.spaceInvaders;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.Timer;
class GamePanel extends JPanel{
SpaceInvadersMain sim;
private Image dbImage;
private Graphics dbg;
int moveDistHor=0;
int moveDistVer=0;
int shipMove=0;
int dir=1;
GamePanel(SpaceInvadersMain sim){
this.sim=sim;
setFocusable(true);
moveMonsters();
MyKeyListener mkl = new MyKeyListener();
addKeyListener(mkl);
Timer t = new Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(moveDistHor<304){moveDistHor+=16*dir;}
if(moveDistHor==304 || moveDistHor==0){dir*=-1;moveDistHor+=16*dir;moveDistVer+=16;}
moveMonsters();
moveProjectiles();
detectColissions();
repaint();
}
});
t.start();
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(Color.white);
Graphics2D g2 = (Graphics2D)g;
Insets insets = getInsets();
g2.translate(insets.left, insets.top);
// drawing monsters
for(int i=0;i<SpaceInvadersMain.M_WIDTH;i++){
for(int j=0;j<SpaceInvadersMain.M_HIGHT;j++){
if(sim.monsters[i][j].ifExists()){
if((moveDistHor+moveDistVer)%32==0)
g2.drawImage(sim.monsters[i][j].img, sim.monsters[i][j].posX, sim.monsters[i][j].posY, 32, 32, null);
else
g2.drawImage(sim.monsters[i][j].img2, sim.monsters[i][j].posX, sim.monsters[i][j].posY, 32, 32, null);
}}
}
//drawing ship
if(sim.ship.exists()) g2.drawImage(sim.ship.img, sim.ship.getPosX(), sim.ship.getPosY(),32,32,null);
}
protected void detectColissions() {
// TODO Auto-generated method stub
}
protected void moveProjectiles() {
// TODO Auto-generated method stub
}
protected void moveShip() {
if(sim.ship.posX+shipMove>0 && sim.ship.posX+shipMove<750) {
sim.ship.posX+=shipMove;
shipMove=0;
}
}
protected void moveMonsters(){
for(int i=0;i<SpaceInvadersMain.M_WIDTH;i++){
for(int j=0;j<SpaceInvadersMain.M_HIGHT;j++){
if(sim.monsters[i][j].ifExists()){
sim.monsters[i][j].posX=10+i*48+moveDistHor;
sim.monsters[i][j].posY=10+j*48+moveDistVer;
}}
}
}
private class MyKeyListener implements KeyListener{
@Override
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_LEFT:
//System.out.println("Arrow left caught");
shipMove=-10;
break;
case KeyEvent.VK_RIGHT:
//System.out.println("Arrow right caught");
shipMove=10;
break;
}
moveShip();
repaint();
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
}
Java 教程中的 Space
Invaders-2D渲染
教程可能会非常有用,例如使用显式的BufferStrategy
。
移动互联快速开发平台 采用Mongodb为底层数据库:数据设计随需而变; 采用Mongodb集群,支撑大数据量,大并发实时查询,便于扩展; 采用SpringMongodb简化开发,简单得令人发指; 采用SpringRest提供JSON的输出,支持各种转换; 提供程序整合、兼容中文、跨域JSONP的支持; 进行了大数据量的压力测试,参数的最优配置; 各种最佳实践。 HTML5 快速开发的前端架构,专
我正试图找到一种方法,以编程方式在合理的时间和移动量内解决一个24块的滑动拼图。下面是我正在描述的谜题中已解决状态的一个示例: 我已经发现IDA*算法可以很好地完成15个拼图(4x4网格)。IDA*算法能够在非常合理的时间内找到任何4x4滑动拼图的最小移动次数。我对这段代码进行了修改,以测试4x4滑动拼图,并通过使用PyPy进一步显著减少了运行时间。不幸的是,当这段代码被改编为5x5滑动拼图时,它
问题内容: 我有我的.. 我加入的一个。当页面内容为屏幕时,它起作用。但是当我没有收到太多数据并且不是时,就会出现问题,该功能无法正常工作。:( 我没有使用。 有人可以帮我解决这个问题吗? 问题答案: var alwaysBounceVertical:Bool //默认为NO。如果是,并且反弹为是,即使内容小于界限,也允许垂直拖动
问题内容: 我有以下绘制图形的简单脚本: 就目前而言,这条线从一条直线到另一条直线看起来不错,但在我看来可能会更好。我想要的是使两点之间的线变得平滑。在中,我会用绘制。 在PyPlot中有一种简单的方法吗?我找到了一些教程,但是它们看起来都相当复杂。 问题答案: 你可以自己整理数据: scipy 0.19.0中不推荐使用spline,请改用BSpline类。 从切换到复制并不是简单的复制/粘贴操作
我目前正在通过斯坦福大学的编程方法论(2008)课程学习Java。我正在试图创建游戏突破,并试图目前动画桨,这是一个GRect类型的对象。这是我的代码: 问题是,如果我用鼠标移动拨片,它会很好地跟随,比我用键盘移动它要流畅得多。改变移动()方法中的值只会改变拨片移动的速度。 我尝试过谷歌搜索,人们做的一件事是逐渐增加和减少划桨移动的速度,但我不确定如何通过这个库正确实现这一点。以下是我的尝试: 在
我正在处理一个应用程序,它以透明的锚窗格开始(没有标题栏和圆角)。我想要能够拖动和移动窗口周围。我已经让它工作了,但是当我点击它时,窗口会向上弹到你从中心拖动的地方,而不是你点击的地方。 CSS: main.java: 控制器: 我有一种感觉,我需要说明光标在哪里,但我不确定如何。我是正确的还是我遗漏了一些更容易的东西?