2

マウスの動きをデータベースに保存するために、リモート Web サーバーに接続しています。これらの動きをアニメーション化するために私が書いた処理プログラムは、コードをサーバーに置いて以来、信じられないほど途切れ途切れになっています。これは、ローカルで実行するのではなく、情報を取得する必要があるためだと思いますが、少し高速化することはできますか? これが私が使用しているコードです

String get_users = "http://example.com/get_users.php";
String get_data = "http://example.com/get_data.php?user=";
ArrayList arrows;
PImage mouse;
int[] user_ids;
int num_users;

void setup() {
  size(1024, 768);
  frameRate(24);
  smooth();
  noStroke();
  mouse = loadImage("arrow-clear.png");
  arrows = new ArrayList();
  getUsers();

  for (int i = 0; i < num_users; i++){
    arrows.add(new Arrow(user_ids[i], i*400, 2*i*100));
  }
}

void getUsers(){
  user_ids = int(loadStrings(get_users));
  num_users = user_ids.length;
  println(num_users);
}

void draw() {
  background(0);

  if (frameCount % 600 == 0){
    getUsers();
    for (int i = 0; i < num_users; i++){
      arrows.add(new Arrow(user_ids[i], i*400, 2*i*100));
    }
  }

  for (int i = arrows.size()-1; i >= 0; i--) { 
    Arrow arrow = (Arrow) arrows.get(i);
    arrow.move();
    if (arrow.finished()) {
      arrows.remove(i);
    }
  }

}

class Arrow {
  String[] all_moves, move_pairs, new_moves;
  int[] moves;
  float x;
  float y;
  int id;
  int i = 0;
  Boolean is_done = false;

  Arrow(int tempID, float tempX, float tempY) {
    all_moves = loadStrings(get_data + tempID);
    id = tempID;
    x = tempX;
    y = tempY;
    if  (all_moves.length > 0){
      move_pairs = shorten(split(all_moves[0], "|"));
    }
  }

  void move() {
    if (move_pairs != null){
      if (i < move_pairs.length){
        moves = int(split(move_pairs[i], ","));
        image(mouse, moves[0], moves[1]);
        ++i;
      } else {
        all_moves = loadStrings(get_data + id);
        if  (all_moves.length > 0){
          new_moves = shorten(split(all_moves[0], "|"));
          for (int j = 0; j < new_moves.length; j++){          
            move_pairs = append(move_pairs, new_moves[j]);
          }
          println(move_pairs);
        } else {
          is_done = true;
        }
      }
    } else {
        is_done = true;
    }
  }

  boolean finished() {
    if (is_done) {
      return true;
    } else {
      return false;
    }
  }
}

編集:明確にするために:すべてのアニメーションを実行する処理アプリケーションはローカルで実行されています。サーバーからダウンロードされるのは、マウスの X 点と Y 点だけです。

4

2 に答える 2

1

すべての動きデータ (またはその大きなチャンク) をクライアントに渡して、すべてをアニメーション化する作業をクライアントに任せたいと考えています。

于 2010-11-05T15:28:33.083 に答える
0

フレームごとに動きのデータをダウンロードするのは良い考えではないと思います。そのような詳細な応答性が必要ない場合は、サーバーから一連の動きを定期的に取得し、draw メソッドのキューに入れます。それ以外の場合は、サーバーが必要なデータのみを送信するようにしてください。サーバーから取得したデータの最初の行のみを使用していることに気付きました - all_moves[0]。実際に 1 行しかない場合は問題ありません。

そのストリームを使用して読み取ることを検討するcreateInput(URL)必要があります。この方法では、要求されたすべての動きに対して新しい入力ストリームを開く必要はありませんが、サーバー側のコードはストリームを維持し、それらに継続的に書き込むことができる必要があります。

于 2011-01-12T11:26:44.137 に答える