-
คือผมกำลังเขียนเกมส์บนมือถืออยู่น่ะครับ แล้วบังเอิญได้ต้นแบบมาจากเกมส์ที่เค้าเขียนไว้สำหรับมือถือยี่ห้อ Sumsung หลังจากนั้นผมก็เอามันมาประยุกต์และนำมารันบนเครื่อง nokia6600 แต่มันมีปัญหาตรงที่ว่า หน้าจอของ Sumsung และ nokia6600 มันไม่เท่ากันน่ะครับ เลยอยากจะถามว่า พอจะมีวิธีแก้ป่าวครับ คือถ้าต้องให้แก้ code ของเกมส์ทั้งหมด มันเยอะมากครับ ผมก็พอเคยได้ยินมาบ้างนะครับ เกี่ยวกับการใช้ gamecanvas ใน midp 2.0 หรือการใช้ class fullcanvas ของ nokia sdk แต่ไม่ค่อยเข้าใจน่ะครับ ใครพอจะช่วยอธิบายให้ผมฟังหน่อยได้ป่าวครับ :(
-
Post ผิดห้องนะครับ
ขอย้ายไปที่
http://www.citecclub.org/forum/Symbian-C-J...wXHTML-f43.html
ปล. ในห้องนั้นมี MSN ผู้รู้เกี่ยวกับ ด้านนี้เยอะเลย Add ไปพูดคุยได้ครับ
-
ขอบคุณมากครับท่าน admin :lol:
-
คือต้องการ ให้ มาวาดลง nokia อยุ่ตรงกลางจอ เพราะจอ nokia ใหญ่ หรือปล่าวครับ ?
ไม่รู้เข้าใจถูกปล่าวนะ
ส่วนหลักๆ ก้ อยู่แถวๆ นี้ละครับ ลองอ่านดู อธิบายทีละบรรทัดก้ขี้เกียจ
public abstract class JavaCanvas extends FullCanvas{
private static final byte APP_POSITION_X = 24;
private static final byte APP_POSITION_Y = 76;
private static final String borderImage = "/176-220.png";
private int drawAppX;
private int drawAppY;
private boolean drawBorderCheck;
protected boolean gameDestroy;
private Image drawImage;
private Image border;
private Graphics gImage;
public JavaCanvas(){
CalculateDrawShift(this.getWidth(), this.getHeight()); // ** ไว้เช็กขนาดหน้าจอนะครับ
drawImage = Image.createImage(128, 128);
gImage = drawImage.getGraphics();
gameDestroy = false;
loadBorder();
}
public void paint(Graphics g){
}
protected Graphics beginPaint(Graphics g){
return gImage;
}
protected void endPaint(Graphics g){
g.drawImage(drawImage, drawAppX, drawAppY, 0);
if(drawBorderCheck){
g.drawImage(border, drawAppX - APP_POSITION_X, drawAppY - APP_POSITION_Y, 0);
}
}
public void destroyGame() {
gameDestroy = true;
}
private void loadBorder(){
try{
if(drawBorderCheck){
border = Image.createImage(borderImage);
} else {
border = null;
}
} catch(IOException e){
}
}
private void CalculateDrawShift(int x, int y){
if(x == 128){
drawAppX = 0;
}
if(y == 128){
drawAppY = 0;
}
if(x < 128){
drawAppX = (x - 128) / 2;
}
if(y < 128){
drawAppY = (y - 128) / 2;
}
if((x <= 128) && (y <= 128)){
drawBorderCheck = false;
}
if((x > 128) || (y > 128)){
drawBorderCheck = true;
if(x == 176){
drawAppX = APP_POSITION_X;
} else {
drawAppX = (x - 128) / 2;
}
if((y == 220) || (APP_POSITION_Y + 128 <= y)){
drawAppY = APP_POSITION_Y;
} else if(APP_POSITION_Y >= 220 - y){
drawAppY = 220 - y;
} else {
drawAppY = (y - 128) / 2;
}
}
}
}
-
:) ก่อนอื่นต้องขอ ขอบคุณ คุณ toonsuperlove มากๆ เลยนะครับ ที่สละเวลาเข้ามาตอบคำถามของผม คือสิ่งที่ผมสงสัย มันไม่ได้เป็นอย่างที่คุณ toonsuperlove เข้าใจครับ คือผมหมายถึงว่า ถ้าปกติแล้ว เกมส์มันมีขนาดหน้าจอ 100*100 pixel(ตัวเลขสมมตินะครับ) แล้วผมจะแก้ให้มันเล่นบนหน้าจอที่มีขนาด 128*176 pixel โดยแสดงผลแบบเต็มหน้าจอนะครับ(พูดง่ายๆ ก็คือ ขยาย pixel ของเกมส์น่ะครับ) จะสามารถทำได้หรือไม่ คือ ณ ตอนนั้น (ขณะที่ผมตั้งคำถามน่ะครับ) ผมเข้าใจผิด คิดว่า method SetFullScreenMode(true); มีลักษณะการทำงานดังกล่าวข้างบน ผมเลยลองใช้ method SetFullScreenMode(true); ปรากฎว่า มันไม่ได้เป็นอย่างที่คิดเพราะว่า method SetFullScreenMode(true); มันแค่แสดงผลแบบเต็มหน้าจอ (โดยการตัดแถบเมนูส่วนล่างของจอภาพ และ ตัดแถบเสาอากาศหรือแบตเตอรี่ด้านบน) :lol: คือ ผมเพิ่งจะเริ่มศึกษา j2me น่ะครับ เลยยังไม่ค่อยเข้าที่เข้าทาง แต่ ณ ตอนนี้ก็พอจะรู้อะไรมากขึ้นมาหน่อยนึงแล้วครับ แต่ก็ยังต้องพยามยามศึกษาอีกเยอะ ยังไงก็ขอบคุณ คุณ toonsuperlove มากนะครับ ที่มีน้ำใจ ช่วยเข้ามาตอบ :)
-
ต้องแก้ code ทั้งหมด รวมไปถึงแก้ขนาด ภาพ image เกือบทั้งหมด ด้วยแล้วแต่ต้องการ
จริงๆหลักๆ ที่จะทำให้เขียนโปรแกรมให้สามารถรันขึ้นบนหลายหน้าจอ คือ
- หลีกเลี่ยงการ hard-code ให้อิงกับค่าตัวแปร พวกขนาดหน้าจอ (screen width,-height) และอาจจะใช้ขนาดของภาพ (image width, height)
- ขึ้นอยู่กับ game design ว่าสามารถออกแบบให้ยึดหรือขยายหน้าจอได้หรือไม่ อาจจะทำการวาดรูปโดยการอิงกับขอบ (ชิดบน ชิดล่าง ชิดซ้าย ชิดขวา เป็นต้น) เพื่อให้ง่าย ให้อ้างอิงจากการทำเกมที่หน้าจอที่ขนาดเล็กแล้วค่อยไปทำหน้าจอใหญ่
- เขียน code แบบใช้ Scale Factor โดยให้มองว่า ขนาดหน้าจอเป็น (0, 0) - (1, 1)