2016-03-02 50 views
0

我想在這裏按照這個教程https://www.smashingmagazine.com/2012/10/design-your-own-mobile-game/和我卡在第二部分。 (2.空白畫布)如何使用多種方法創建新對象?

我不知道在哪裏放POP.Draw對象。它是否進入創建其他對象的var POP {}括號內?我試着把它放在內部,外部,以及我認爲不合理的init函數中。目的是在新的Draw對象中創建方法,以便稍後調用它們以在畫布中創建圖片。

這是我目前的代碼。這是一樣的一個在鏈接:

var POP = { 
    //setting up initial values 
    WIDTH: 320, 
    HEIGHT: 480, 
    // we'll set the rest of these 
    //in the init function 
    RATIO: null, 
    currentWidth: null, 
    currentHeight: null, 
    canvas: null, 
    ctx: null, 

    init: function() { 
    //the proportion of width to height 
    POP.RATIO = POP.WIDTH/POP.HEIGHT; 
    //these will change when the screen is resized 
    POP.currentWidth = POP.WIDTH; 
    POP.currentHeight = POP.HEIGHT; 
    //this is our canvas element 
    POP.canvas = document.getElementsByTagName('canvas')[0]; 
    //setting this is important 
    //otherwise the browser will 
    //default to 320x200 
    POP.canvas.width = POP.WIDTH; 
    POP.canvas.width = POP.HEIGHT; 
    //the canvas context enables us to 
    //interact with the canvas api 
    POP.ctx = POP.canvas.getContext('2d'); 

    //we need to sniff out Android and iOS 
    // so that we can hide the address bar in 
    // our resize function 
    POP.ua = navigator.userAgent.toLowerCase(); 
    POP.android = POP.ua.indexOf('android') > -1 ? true : false; 
    POP.ios = (POP.ua.indexOf('iphone') > -1 || POP.ua.indexOf('ipad') > -1) ? true : false; 

    //we're ready to resize 
    POP.resize(); 
    POP.Draw.clear(); 
    POP.Draw.rect(120, 120, 150, 150, 'green'); 
    POP.Draw.circle(100, 100, 50, 'rgba(225,0,0,0.5)'); 
    POP.Draw.text('Hello WOrld', 100, 100, 10, "#000"); 

    }, 

    resize: function() { 
    POP.currentHeight = window.innerHeight; 
    //resize the width in proportion to the new height 
    POP.currentWidth = POP.currentHeight * POP.RATIO; 
    //this will create some extra space on the page 
    //allowing us to scroll past the address bar thus hiding it 
    if (POP.android || POP.ios) { 
     document.body.style.height = (window.innerHeight + 50) + 'px'; 
    } 

    //set the new canvas style width and height note: 
    //our canvas is still 320 x 400 but we're essentially scaling it with css 
    POP.canvas.style.width = POP.currentWidth + 'px'; 
    POP.canvas.style.height = POP.currentHeight + 'px'; 

    //we use a timeout here because some mobile browsers 
    //don't fire if there is not a short delay 
    window.selfTimeout(function() { 
     window.scrollTo(0, 1); 
    }) 

    //this will create some extra space on the page 
    //enabling us to scroll past the address bar 
    //thus hiding it 
    if (POP.android || POP.ios) { 
     document.body.style.height = (window.innerHeight + 50) + 'px'; 
    } 

    } 

}; 
window.addEventListener('load', POP.init, false); 
window.addEventListener('resize', POP.resize, false); 

//abstracts various canvas operations into standalone functions 
POP.Draw = { 
    clear: function() { 
    POP.ctx.clearRect(0, 0, POP.WIDTH, POP.HEIGHT); 
    }, 

    rect: function(x, y, w, h, col) { 
    POP.ctx.fillStyle = col; 
    POP.ctx.fillRect(x, y, w, h); 
    }, 

    circle: function(x, y, r, col) { 
    POP.ctx.fillStyle = col; 
    POP.ctx.beginPath(); 
    POP.ctx.arc(x + 5, y + 5, r, 0, Math.PI * 2, true); 
    POP.ctx.closePath(); 
    POP.ctx.fill(); 
    }, 

    text: function(string, x, y, size, col) { 
    POP.ctx.font = 'bold' + size + 'px Monospace'; 
    POP.ctx.fillStyle = col; 
    POP.ctx.fillText(string, x, y); 
    } 
}; 

回答

0

解決

我不知道,但完成的代碼是在網頁上。我下載了它並查看了例子的答案。

我在調用POP.resize()方法之前通過放置POP.Draw.clear,POP.Draw.rect方法解決了該問題。我不確定訂單的重要性,但確實如此。

相關問題