İşleme animasyon son derece dalgalı bir uzak ana veri alırken

0 Cevap php

Ben bir veritabanında saklanan fare hareketleri almak için uzak web sunucusuna bağlanarak duyuyorum. Ben bu hareketleri hareketlendirmek için yazdım işleme programı sunucu üzerinde kod koyarak beri inanılmaz derecede takılmalar olmuştur. Ben oldukça yerel olarak çalışan daha o bilgiyi almak için var çünkü bu, ama şeyler biraz hızlandırmak için mümkün olduğunu biliyoruz? İşte kullanıyorum kod

String get_users = "http://zackseuberling.com/staging/404/php/get_users.php";
String get_data = "http://zackseuberling.com/staging/404/php/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;
    }
  }
}

EDIT: açıklığa kavuşturmak için: tüm animasyon yapmanın İşleme uygulamanın lokal çalışıyor. Fare için X ve Y noktaları sunucudan indirilen elde tek şeydir.

0 Cevap