กล้องบน HTML 5 Canvas

โปสเตอร์ครั้งแรกที่นี่

ฉันได้ค้นหาวิธีแก้ไขปัญหานี้มาหลายวันแล้ว แต่ก็ไม่มีประโยชน์ หากถูกถาม ฉันขอให้คุณเชื่อมโยงฉันเนื่องจากหาไม่พบ อย่างไรก็ตามนี่คือ:

ฉันกำลังทำงานกับแอปพื้นที่ทำงานแบบเรียงต่อกันและมีปัญหาในการเคลื่อนย้ายกล้อง โดยพื้นฐานแล้ว ฉันต้องการให้ฮีโร่อยู่ตรงกลางหน้าจอ เว้นแต่เขาจะเข้ามาใกล้และขอบ ฉันได้ลองใช้การแปลผืนผ้าใบในขณะที่ฮีโร่เคลื่อนไหว แต่มีปัญหาในการตัดเฉือน ฉันลงเอยด้วยการแก้ไขตรรกะของฉันใหม่ และตอนนี้ก็คิดออกแล้วว่าจะเริ่มวาดตรงไหนตามพิกัดของฮีโร่ จากนั้นให้วาดฮีโร่ของฉันไว้ที่กึ่งกลางผืนผ้าใบ มันทำงานได้ดีจนกว่าฉันจะเข้าใกล้ขอบของหน้าจอ นี่คือโค้ดปัจจุบันของฉันสำหรับการวาดแผนที่ leoX และ leoY เป็นพิกัดสัมบูรณ์ของฮีโร่ ผืนผ้าใบคือ 600X600

var topLeftX = Math.floor((leoX - 300)/33);
var topLeftY = Math.floor((leoY - 300)/33);


//draw map
for(var rowCtr=topLeftY;rowCtr<mapRows;rowCtr++){
for(var colCtr=topLeftX;colCtr<mapCols;colCtr++){

  var tileId = tileMap[rowCtr][colCtr]+ mapIndexOffset;
  var mapSourceX = Math.floor(tileId % 8 )*33;
  var mapSourceY = Math.floor(tileId / 8 )*33;
  context.drawImage(map, mapSourceX, mapSourceY,33,33,(colCtr-topLeftX)*33,(rowCtr-        topLeftY)*33,33,33);

 }
}
//code to draw leo
context.drawImage(tilesheet, sourceX,sourceY,32,48,300,300,32,48);

//update leo's position                 
leoX += leoDeltaX;
leoY += leoDeltaY;

แก้ไข: ลิงก์ไปยังตัวอย่างตอนนี้ตายแล้ว


person Contristo    schedule 17.08.2011    source แหล่งที่มา
comment
ฉันคิดว่าฉันอาจแก้ไขปัญหาได้แล้ว ฉันไม่คิดว่ามันสวยหรือหรูหรา แต่โดยพื้นฐานแล้ว ฉันแค่กำลังตรวจสอบเพื่อดูว่าฉันอยู่ที่ขอบหรือมุมของแผนที่และวาดแตกต่างออกไปตามนั้น ฉันจะโพสต์วิธีแก้ปัญหาของฉันเมื่อฉันจับฮีโร่ได้ถูกต้องจริงๆ   -  person Contristo    schedule 18.08.2011
comment
เอาล่ะ โดยพื้นฐานแล้วโค้ดข้างต้นใช้งานได้แต่ขาดบางสิ่งไป สำหรับตำแหน่งของลีโอตัวหนึ่งบนผืนผ้าใบควรเป็นความกว้าง 0.5 x 0.5 ความสูงของผืนผ้าใบเท่านั้น ถ้าเขาไม่ได้อยู่ที่มุมหรือขอบ ดังนั้นสิ่งที่ฉันทำคือ สร้างตัวแปรชื่อ AdjustXPos และ AdjustYPos ซึ่งตั้งค่าตามตำแหน่งของเขา เช่น ถ้าเขาอยู่ที่มุมซ้ายบน เราก็สามารถใช้แค่ตำแหน่ง x,y จริงๆ ของเขาได้ ที่ขอบด้านข้าง เราต้องการให้ y อยู่ที่ความสูง .5 เพื่อให้กล้องยังคงเลื่อนขึ้น แต่ต้องการให้ x แสดงถึงตำแหน่งของลีโอ   -  person Contristo    schedule 18.08.2011
comment
เพียงจำไว้ว่าคุณต้องชดเชยทางด้านขวาเนื่องจากหน้าจอไม่ได้เลื่อนอีกต่อไป หวังว่านี่จะช่วยใครบางคนในอนาคตที่เป็นคนไร้สาระเหมือนฉัน   -  person Contristo    schedule 18.08.2011
comment
คุณจะบอกว่าคุณได้ตอบคำถามนี้ด้วยตัวเองตอนนี้หรือไม่? ปิดได้ไหม?   -  person andrewmu    schedule 06.09.2011
comment
หากคุณแก้ไขได้แล้ว ให้ส่งวิธีแก้ปัญหาของคุณเป็นคำตอบและยอมรับหากคุณไม่ได้รับคำตอบที่ดีขึ้นภายใน 2 วัน   -  person Some Guy    schedule 12.09.2011
comment
เธรดใหม่ที่เกี่ยวข้อง: HTML5 Canvas follow object   -  person Gustavo Carvalho    schedule 08.06.2013