2017-04-12 21 views
0

私はスプライトをHTML5/JSアプリケーションの画面の中央に描画しようとしています。大きな背景画像(画面よりも大きい)があり、スクロールする必要がありますが、スプライトは常に現在のビューの中央に描画する必要があります。だから私は背景とdivを作成し、私はスプライトを描画しようとしているが、私はスクロールイベントを処理しようとすると描画が発生しません。HTML5 + javascript:画面の中央にスプライトを残す方法を教えてください。

私がしたことの1つは、キャンバスサイズを画像のサイズ(非常に大きい)に設定したことでした。これは正しいです?これを正しく設定するにはどうしたらいいですか?

ありがとうございます。

はここに私のコードです:

var bgCanvas, bgCanvasContext; 
 
var carImg; 
 
var cineImg; 
 

 
var dstXRightLane = 547; 
 
var dstXLeftLane = 450; 
 

 
var maxPoints = 1499999; 
 
var currentPoints = 500000; 
 

 
var firstPrizeHeigth = 17430; 
 
var firstPrizeDstX = 150; 
 
var firstPrizeDstY = 16800; 
 

 
function getHeightFromPoints(points) 
 
{ 
 
    var height = 0; 
 
    console.log("points is ", points);  
 
    height = Math.round(18897 - 0.012598 * points); 
 
    console.log("height is ", height);  
 
    
 
    return height; 
 
} 
 

 
function drawSprite(ctx, img, dstX, dstY) 
 
{ 
 
    console.log("about to draw sprite...");  
 
    ctx.drawImage(img, dstX, dstY); 
 
    console.log("draw returned...");   
 
} 
 

 
function drawCar(dstX, dstY) 
 
{ 
 
    drawSprite(bgCanvasContext, carImg, dstX, dstY); 
 
} 
 

 
function drawCarOnLeftLane(dstY) 
 
{ 
 
    drawCar(dstXLeftLane, dstY);  
 
} 
 

 
function drawCarOnRightLane(dstY) 
 
{ 
 
    drawCar(dstXRightLane, dstY); 
 
} 
 

 
function gotoBotton() 
 
{ 
 
    // cross browser solution 
 
    window.scrollTo(0, document.body.scrollHeight || 
 
         document.documentElement.scrollHeight);  
 
} 
 

 
var lastScrollYPosition = 0; 
 

 
function scrollEventHandler(e) 
 
{ 
 
    console.log("handling scroll event.."); 
 
    lastScrollYPosition = window.scrollY; 
 
    
 
    console.log("current scroll y-position is ", lastScrollYPosition); 
 
    console.log("current scroll top is ", window.scrollTop); 
 
    console.log("current scroll bottom is ", window.scrollBotton);  
 
    
 
    console.log("scroll event handler finished");  
 
} 
 

 
function isToWinPrize(currentHeight, prizeHeight) 
 
{ 
 
    return(currentHeight < prizeHeight); 
 
} 
 

 

 
// on load function 
 
(function() 
 
{ 
 
    var dstY = 18430;  
 

 
    console.log("main program entry point"); 
 
    
 
    console.log("about to call gotoBotton"); 
 
    gotoBotton();  
 
    console.log("gotoBotton returned"); 
 
    
 
    bgCanvas = document.getElementById("bgPrizes"); 
 
    bgCanvas.width = 1080; 
 
    bgCanvas.height = 18898;  
 
    bgCanvasContext = bgCanvas.getContext("2d");  
 
    carImg = document.getElementById("car"); 
 
    cineImg = document.getElementById("cine");  
 
    
 
    window.addEventListener('scroll', scrollEventHandler); 
 
    
 
    currentPointsHeight = getHeightFromPoints(currentPoints); 
 

 
    if(isToWinPrize(currentPointsHeight, firstPrizeHeigth)) 
 
    { 
 
     console.log("drawing prize..."); 
 
     drawSprite(bgCanvasContext, cineImg, firstPrizeDstX, firstPrizeDstY); 
 
    } 
 
    else 
 
    { 
 
     console.log("still need ", firstPrizeHeigth - currentPointsHeight, " points to win"); 
 
    }  
 
    
 
    drawCarOnLeftLane(dstY); 
 
    drawCarOnRightLane(dstY); 
 
    
 
}());
<html> 
 
    <head> 
 
     <title>Progress Bar</title> 
 
    </head> 
 
    <body>  
 
     <div style="background-image: url(./img/bg.jpg); height: 18898px; 
 
                  width: 1080px;"> 
 
      <canvas id="bgPrizes"></canvas> 
 
      
 
      <div style="display:none"> 
 
       <img id="car" src="./img/car.png" width="82" height="162"> 
 
      </div> 
 
      <div style="display:none"> 
 
       <img id="cine" src="./img/cine.png" width="199" height="262"> 
 
      </div> 
 
      
 
      <script src="progressBar.js"></script> 
 
     </div> 
 
    </body> 
 
</html>

答えて

0

私はあなたがゲームのような何かをしたいと思いますが、真ん中の文字と背景の動きは、移動のようにそれを作ります。

あなたは1920 * 1080を作成し、スプライトを中央に置き、バックグラウンドを移動する必要があります。この解決法はあなたに適していると思います。

関連する問題