ก่อนที่จะใช้การคาดการณ์กับการเคลื่อนไหวของสไปรต์การชนของฉันทำงานได้อย่างสมบูรณ์ อย่างไรก็ตามหลังจากที่ใช้การคาดการณ์กับการเคลื่อนไหวของสไปรต์ของฉัน (เพื่อทำให้สิ่งต่าง ๆ เรียบ) การชนจะไม่ทำงานอีกต่อไป
นี่คือสิ่งที่ทำงานก่อนการคาดการณ์:
อย่างไรก็ตามหลังจากที่ฉันใช้การคาดการณ์ของฉันแล้ว ฉันถือว่านี่เป็นเพราะมันทำหน้าที่ประสานงานใหม่ที่ได้รับการผลิตโดยขั้นตอนการอนุมาน (ซึ่งตั้งอยู่ในการเรียกของฉัน)
หลังจากที่ฉันใช้การคาดการณ์ของฉัน
วิธีแก้ไขพฤติกรรมนี้
ฉันลองใส่การตรวจสอบการชนกันเพิ่มเติมหลังจากการคาดการณ์ - นี่ดูเหมือนจะเคลียร์ปัญหาจำนวนมาก แต่ฉันได้ตัดออกเพราะการวางตรรกะในการแสดงผลของฉันไม่เป็นไปตามคำถาม
ฉันได้ลองทำสำเนาตำแหน่ง spriteX โดยคาดการณ์และวาดภาพโดยใช้สิ่งนั้นแทนที่จะเป็นแบบดั้งเดิมดังนั้นการปล่อยให้แบบดั้งเดิมยังคงอยู่เพื่อตรรกะในการรับ - นี่ดูเหมือนจะเป็นตัวเลือกที่ดีกว่า แต่ก็ยังสร้างผลแปลก ๆ เมื่อชนกับผนัง ฉันค่อนข้างแน่ใจว่านี่ไม่ใช่วิธีที่ถูกต้องในการจัดการกับเรื่องนี้
ฉันพบคำถามที่คล้ายกันสองสามข้อที่นี่ แต่คำตอบไม่ได้ช่วยฉัน
นี่คือรหัสการคาดการณ์ของฉัน:
public void onDrawFrame(GL10 gl) {
//Set/Re-set loop back to 0 to start counting again
loops=0;
while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){
SceneManager.getInstance().getCurrentScene().updateLogic();
nextGameTick+=skipTicks;
timeCorrection += (1000d/ticksPerSecond) % 1;
nextGameTick+=timeCorrection;
timeCorrection %=1;
loops++;
tics++;
}
extrapolation = (float)(System.currentTimeMillis() + skipTicks - nextGameTick) / (float)skipTicks;
render(extrapolation);
}
การใช้การประมาณค่า
render(float extrapolation){
//This example shows extrapolation for X axis only. Y position (spriteScreenY is assumed to be valid)
extrapolatedPosX = spriteGridX+(SpriteXVelocity*dt)*extrapolation;
spriteScreenPosX = extrapolationPosX * screenWidth;
drawSprite(spriteScreenX, spriteScreenY);
}
แก้ไข
ดังที่ฉันได้กล่าวไว้ข้างต้นฉันได้ลองทำสำเนาพิกัดของเทพดาโดยเฉพาะเพื่อวาดด้วย .... นี่เป็นปัญหาของตัวเอง
ประการแรกไม่ว่าการคัดลอกเมื่อสไปรต์เคลื่อนที่ไปทางไหนมันจะลื่นไหลสุด ๆ เมื่อมันหยุดมันจะโยกไปทางซ้าย / ขวาเล็กน้อย นี่เป็นพฤติกรรมปกติและเราสามารถ 'ปิด' เมื่อผีสางหยุดหรือไม่
ฉันได้ลองตั้งค่าสถานะสำหรับซ้าย / ขวาและคาดการณ์เฉพาะถ้าสิ่งเหล่านี้ถูกเปิดใช้งาน ฉันได้ลองคัดลอกตำแหน่งล่าสุดและตำแหน่งปัจจุบันเพื่อดูว่ามีความแตกต่างหรือไม่ อย่างไรก็ตามเท่าที่การปะทะกันเกิดขึ้นสิ่งเหล่านี้ก็ไม่ได้ช่วยอะไร
หากผู้ใช้กดปุ่มบอกว่าปุ่มขวาและสไปรต์เคลื่อนที่ไปทางขวาเมื่อผู้ใช้กดปุ่มที่กำแพงค้างไว้หากผู้ใช้กดปุ่มขวาค้างไว้สไปรท์จะเคลื่อนไหวไปทางขวาในขณะที่ผนังถูกหยุด ( ดังนั้นจึงไม่เคลื่อนไหวจริง ๆ อย่างไรก็ตามเนื่องจากธงด้านขวายังคงถูกตั้งค่าและเนื่องจากรูทีนการชนกำลังเคลื่อนย้ายสไปรท์ออกมาจากผนังอย่างต่อเนื่องจึงยังปรากฏรหัส (ไม่ใช่ผู้เล่น) ที่สไปรท์ยังเคลื่อนไหวอยู่และดังนั้น การคาดการณ์อย่างต่อเนื่อง ดังนั้นสิ่งที่ผู้เล่นจะเห็นคือสไปรท์ 'คงที่' (ใช่มันเคลื่อนไหว แต่จริง ๆ แล้วมันไม่ได้เคลื่อนที่ผ่านหน้าจอ) และทุก ๆ ตอนจากนั้นมันจะสั่นสะเทือนอย่างรุนแรงเมื่อการคาดการณ์พยายามที่จะทำสิ่งที่ ..... .. หวังว่าความช่วยเหลือนี้