ฉันกำลังสร้างตัวอย่างโอเอกซ์ง่ายๆด้วย LibGDX ฉันมีภาพง่าย ๆ : ข้ามวงกลมและกระดานทั้งหมดpng
สร้างด้วย GIMP ที่มีพื้นหลังโปร่งใส
ฉันจะทำให้พวกเขาเป็นTexture
โปร่งใสได้อย่างไร
ฉันได้ลองใช้คุณสมบัติเปิดใช้งาน GL10 แล้ว แต่ดูเหมือนจะไม่ทำงาน
ฉันกำลังสร้างตัวอย่างโอเอกซ์ง่ายๆด้วย LibGDX ฉันมีภาพง่าย ๆ : ข้ามวงกลมและกระดานทั้งหมดpng
สร้างด้วย GIMP ที่มีพื้นหลังโปร่งใส
ฉันจะทำให้พวกเขาเป็นTexture
โปร่งใสได้อย่างไร
ฉันได้ลองใช้คุณสมบัติเปิดใช้งาน GL10 แล้ว แต่ดูเหมือนจะไม่ทำงาน
คำตอบ:
ก่อนเรนเดอร์:
batch.enableBlending();
batch.begin();
//draw stuff
batch.end();
สร้าง Sprite และกำหนด Texture ให้กับมันจากนั้นใช้ Sprite setColor เพื่อปรับอัลฟาของมันเช่นนั้น
Texture yourTexture = new Texture("image.png");
sprite = new Sprite(yourTexture);
//RGBA
sprite.setColor(1, 0, 0, 0.2f);
และในการเรนเดอร์ () ให้ใช้ SpriteBatch
sprite.draw(spriteBatch);
ถ้าคุณใส่
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
ที่จุดเริ่มต้นของการเรนเดอร์ () ของคุณควรรีเฟรชหน้าจอด้วยสีดำ ดังนั้นหากภาพใดมีความโปร่งใสในภาพจะเห็นได้ชัดเจน
ดังนั้นลูป render () ของคุณอาจมีลักษณะเช่นนี้
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
// Update logic & etc.
batch.begin();
// Place your render calls
// In this I use a Sprite object named "sprite" and all you need to do is call .draw();
// on it and it will render at 0,0, unless told differently with .setPosition();
sprite.draw(batch);
batch.end();
}
ฉันพยายามแสดง. png ด้วยความโปร่งใสเช่นกัน ด้วยการตั้งค่าพื้นฐาน (ไม่เปิดใช้งานการผสม) ทำให้การแสดงผลไม่ถูกต้อง
ฉันไม่เคยเปิดใช้งานการผสม แต่ฉันเพิ่มสิ่งนี้:
Gdx.gl.glClear(GL20.GL_ALPHA_BITS);
ปัญหาของฉันคืออัลฟาก็ไม่เคยเคลียร์ หมายความว่าถ้าฉันแสดงด้วย 0.1 อัลฟามันจะใช้เวลา 10 เฟรมจนกว่าอัลฟาจะ "ซ้อนกัน" กลับไปที่ 1 การเพิ่มการโทรด้านบนลบอัลฟ่าเหมือนกับที่คุณต้องการสีที่ชัดเจน
ฉันรู้ว่านี่เป็นคำถามเก่าดังนั้นวิธีแก้ปัญหาจึงแตกต่างกัน enableBlending ยังคงใช้งานได้ แต่ฉันไม่แน่ใจว่าจะป้องกัน "การซ้อน" ของอัลฟ่าหรือไม่ การล้างบิตอัลฟาอาจเป็นวิธีที่ง่ายที่สุดในการป้องกันไม่ให้ดูแข็ง
สำหรับการเรนเดอร์ตัวจริงนั้นจะเหมือนกันทุกครั้ง
//Viewport, camera, logic, etc
batch.begin();
//draw your image(s) here
batch.end();