私はOpenGL SurfaceViewを持っています。これは、ネットワークポートを経由する何らかの外部イベントによって更新される必要があります。このネットワークソケットは外部スレッドで動作しています。着信トラフィックのためにポートで常時待ち受ける必要があるため、トラフィックが到着したときに新しいOpenGLオブジェクトを作成する必要があります。画面に表示されます。 私はすべてのOpenGLのものを理解する限り、オブジェクトを外部スレッドから変更することはできませんが、queueevent()を使用するとチャンスがあります。 私のコードは次のように見えますが、生憎それがot作業をにISN:だからAndroid:いくつかのスレッドでOpenGL
public class GameMain extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
glView=new GameView(this);
setContentView(glView);
}
}
public class MyGLSurfaceView extends GLSurfaceView{
public MyGLSurfaceView(Context context) {
super(context);
renderer = new OpenGLRenderer();
this.setRenderer(renderer);
}
public void do(ServerSocket ss){
try{
while(true){
try {
ss.setSoTimeout(500);
Socket s = ss.accept();
renderer.set();
}catch(SocketTimeoutException e){}
}
}catch(Exception e){
handleException();
}
public void handleEvent(){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try{
ServerSocket ss = new ServerSocket(7070);
while(true){
get(ss);
}
}catch(Exception e){
e.printStackTrace();
}
}
});
queueEvent(t);
t.start();
}
}
public class OpenGLRenderer implements Rend{
Cube c = null;
public OpenGLRenderer(){
//inits
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
//.....
}
public void onDrawFrame(GL10 gl) {
if(c!=null)
doSth();
//....
}
public void set(){
c = new Cube();
}
}
セット()メソッドは、トラフィックが到着するネットワーキングときに呼び出されますが、生憎ローカル変数cがonDrawFrame()メソッドのために更新されません。それはなぜですか、どうすればこれを達成できますか?
誰でも私を助けてくれますか?
どうもありがとう よろしく
GameMainとは何ですか? do()はいつ呼ばれますか?あなたのソケットリスニングスレッドの予想寿命はどれくらいですか?いくつかのブレークポイントを設定し、デバッガで調査する必要があります... –