我做了一个小游戏,在屏幕上绘制敌人,敌人来自ArrayList.屏幕重新绘制,以便敌人也可以移动.我这个代码执行此操作:
for (Meteor m : getMeteorArrayList()) {
if (m.getVisible())
{
canvas.drawBitmap(m.getImg(), m.getX(), m.getY(), p);
}
else
{
Iterator<Meteor> iter = getMeteorArrayList().iterator();
while (iter.hasNext())
{
if (iter.next() == m)
{
iter.remove();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是这给了一个问题.如果我杀死敌人,我希望它从ArrayList中删除.我知道我可以将它设置为NULL但它仍然存在.我Iterator可以在上面的代码中看到这个.
这样做的问题是,如果在我移除敌人后重新绘制屏幕,则应用程序会因此错误而崩溃:
java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
Run Code Online (Sandbox Code Playgroud)
我想这是因为我突然在敌人所在地的ArrayList上有一个洞.我怎样才能这样做,以便我可以从ArrayList中删除一些东西,然后仍然可以访问其余的东西?
我的UDP客户端服务器应用程序有问题.我和两者之间有联系.他们都互相发送数据.只有服务器从客户端接收数据,但不是相反,但服务器正在发送.我究竟做错了什么?
using System;
using System.Globalization;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace PewPewGame
{
class Client
{
UdpClient udpClient;
IPEndPoint RemoteIpEndPoint;
String serverIp;
String[] dataAray;
GameScreen gameScreen;
Player otherPlayer;
public Client(string serverIp, GameScreen gameScreen, Player otherPlayer)
{
this.gameScreen = gameScreen;
this.otherPlayer = otherPlayer;
udpClient = new UdpClient();
this.serverIp = serverIp;
}
public void clientThread()
{
udpClient = new UdpClient(serverIp,1002);
while (true)
{
RemoteIpEndPoint = new IPEndPoint(IPAddress.Parse(serverIp), 1002);
receiveData();
}
}
public void receiveData()
{
Byte[] receiveBytes = udpClient.Receive(ref …Run Code Online (Sandbox Code Playgroud) 我对 if 语句有一个奇怪的问题。我正在检查布尔值是否为真,如果它是必须运行的 if 语句。我在很多地方 System.out.println 布尔值的值,它总是假的,但 if 语句仍然运行。有什么帮助吗?
import java.util.ArrayList;
public class GameLoop extends Thread {
private Boolean running;
private ArrayList<Meteor> meteorArrayList;
private Boolean win;
private GameScreen gameScreen;
public GameLoop(GameScreen gameScreen, ArrayList<Meteor> meteorArrayList)
{
setMeteorArrayList(meteorArrayList);
setGameScreen(gameScreen);
setRunning(true);
setWin(false);
}
@Override
public void run()
{
while (running)
{
if(checkWin());
{
System.out.println(checkWin());
gameScreen.winGame();
}
}
}
public Boolean checkWin()
{
if(getMeteorArrayList().isEmpty())
{
setWin(true);
}
else
{
setWin(false);
}
System.out.println(getWin());
return getWin();
}
public void cancel()
{
interrupt();
}
//======================GETTER EN SETTERS============================= …Run Code Online (Sandbox Code Playgroud)