我有:
Game.java
(包含代表游戏场的整数数组和更新该场的方法)StartServlet
(创建一个新的Game
实例,对其进行1次更新并使用该字段发送JSON响应)和Javascript函数updateState()
(采用servlet的
响应并基于该文档进行更改):
public class Game {
private int[][] field;
public Game(int size) {
//creates field of int[size][size] and randomly puts 1s and 0s inside
}
public void update() {
//updates field (1 or 0), depending on some rules
}
public String toString() {
//returns a String representation of the field array
}
public int[][] getField() {return field;}
}
和一个使用Game
类的Servlet:
public class StartServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
JSONArray jsonArray = new JSONArray();
Game game = new Game(15);
game.update();
for (int i=0; i<game.getField().length; i++) {
//transfer data from the game's field to JSON
}
response.getWriter().println(jsonArray.toString());
}
}
在前面,单击按钮时,Javascript会使用JSON
返回的StartSevlet
数组
$(document).on("click", "#start-button", function () {
//update game's state every second
var timerId = setInterval(updateState, 1000);
//do it for 5 seconds
setTimeout(function() {
clearInterval(timerId);
alert( 'stop' );
}, 5000);
});
function updateState() {
getResponseField(drawFieldJSON);
}
function getResponseField(callback) {
//gets JSON array from the servlet, stores it in Javascript's array
callback(responseField);
}
function drawFieldJSON(responseField) {
//makes appropriate changes to document's divs, depending on the reponse array
}
我希望能够在Java循环中更新游戏状态,如下所示:
var timerId = setInterval(updateState, 1000); //update game's state every second
setTimeout(function() { //do it for 5 seconds
clearInterval(timerId);
alert( 'стоп' );
}, 5000);
但是,游戏并没有真正改变,因为它每次都是对servlet的新请求,并且每次都会创建一个新的Game
实例。我不确定如何对其进行修改以使其正常工作,甚至不确定。
答案 0 :(得分:2)
将游戏对象存储在会话中,并为每个请求从会话中获取游戏对象。这样它会为每个请求增加
答案 1 :(得分:1)
在Servlet类Game game = new Game(15);
中将Game对象设为静态
在这种情况下,直到未部署Web应用程序为止,serlvet中的静态字段不仅会存在于所有会话和请求中,而且会存在于整个应用程序中。
请尝试如果您遇到任何问题或需要任何更新,请评论我将使用代码进行更新