मैं कहूंगा कि एक फ़ील्ड जोड़ें जो चलाने और प्रस्तुत करने के लिए आवश्यक थ्रेड निर्दिष्ट करता है, और धागे की संख्या == थ्रेड आवश्यक होने पर थ्रेड्स को संख्या दें, फिर इसे चलाने और प्रस्तुत करने की अनुमति है, और आवश्यक थ्रेड फ़ील्ड को बढ़ाएं , जब तक यह अधिकतम हिट नहीं हो जाता है, तो लूप 0 पर वापस ले जाएं। वैकल्पिक रूप से, आप टिक के लिए एक थ्रेड का उपयोग कर सकते हैं और दूसरा प्रस्तुत करने के लिए, यह आसान हो सकता है। यहाँ एक उदाहरण कोड है:
public Game() {
this.tickThread=new Thread(this::tickLoop());
this.renderThread=new Thread(this::renderLoop());
}
public void tickLoop() {
//code for timing...
while(running) {
//more code for timing...
tick();
}
}
public void renderLoop() {
//code for timing or syncing frames...
while(running) {
//more code for timing...
render();
}
}
वैकल्पिक रूप से, आप कह सकते हैं:
| MyRunnable.java |
public interface MyRunnable
{
public abstract void run(boolean toRender);
}
| MyThread.java |
public class MyThread extends Thread
{
private boolean isRender;
private MyRunnable runnable
public MyThread(boolean isRender,MyRunnable runnable)
{
this.isRender=isRender;
this.runnable=runnable;
}
public void run()
{
this.runnable.run(this.isRender);
}
}
| Game.java |
public class Game extends /*JPanel/Canvas/JFrame/Some other component*/
{
private MyThread tickThread;
private MyThread renderThread;
private boolean running;
public Game()
{
super();
tickThread=new MyThread(this::run);
renderThread=new MyThread(this::run);
//other constructor code
}
public void tick()
{
//tick code here
}
public void render()
{
//render code here
}
public void run(boolean isRender)
{
//timing variables
while(running)
{
//timing code
if(isRender)
{
this.render();
}
else
{
this.tick();
}
}
}
}
स्रोत
2017-09-05 02:10:08
http://gamedev.stackexchange.com/ इस तरह की सामग्री के लिए एक बेहतर जगह हो सकता है। – Kevin