HTML Canvas & JavaScript - Selection Menu - Setting Initial and Sustaining Current Selection

后端 未结 2 1743
长情又很酷
长情又很酷 2021-01-23 01:26

In the HTML canvas below I have a selection menu which triggers the drawing of an image beside it dependent on what is selected (numbers 1-5 in the example below). The JavaScrip

2条回答
  •  醉话见心
    2021-01-23 02:16

    you must make the paint class (in your code) once,

    function Game (elementID,width,height){
    	this.elementID = elementID;
    	this.element   = document.getElementById(elementID);
    	this.width = width;
    	this.height = height;
    
    	this.palette = {
    		color1:'#fff',
    		color2:'#000',
    		color3:'#9F3A9B',
    		color4:'#a84ea5',
    		color5:'#b56ab2',
    		color6:'#bf7dbd',
    		color7:'#d5a8d2'
    	}; 
    
    	this.element.style.width = width + 'px';
    	this.element.style.height= height + 'px';
    	this.element.style.border='solid thin ' + this.palette.color2;
    	this.element.style.display= 'block';
    	//this.element.style.margin='1em auto';
    	this.element.style.background=this.palette.color3;
    
    
    	this.initialGame();
    }
    
    Game.prototype.initialGame = function(){
    	this.canvas  = document.createElement("canvas");
    	this.canvas.width  =  this.width;
    	this.canvas.height =  this.height;
    	this.element.appendChild(this.canvas);
    
    	this.initialTitle();
    	this.initialSideButtons();
    	this.initialBoard();
    	this.initialFooter();
    
        // initial selection
        this.sideButtons.select(this.sideButtons.buttons[0]);
    
    	this.resize(this.width,this.height);
    	this.render();
    	this.attachEvents();
    }
    
    Game.prototype.attachEvents = function(){
    	var element = this.element;
    	
    	var getX = function(evt){return evt.offsetX || evt.layerX || (evt.clientX - element.offsetLeft);};
    	var getY = function(evt){return evt.offsetY || evt.layerY || (evt.clientY - element.offsetTop);};
     
    	var game = this;
    	this.element.addEventListener('mousemove',function(evt){
    		game.hover(getX(evt),getY(evt));
    		game.render();
    	});
    
    	this.element.addEventListener('click',function(evt){
    		game.sideButtons.click();
    		game.render();
    	});
    }
    
    Game.prototype.onSelect = function(button){
    	this.selected = button;
    };
    
    Game.prototype.hover=function(x,y){
    	this.hoverX = x;
    	this.hoverY = y;
    };
    
    Game.prototype.initialBoard = function(){
    	var game = this;
    	var Board = function(){
    		this.left = 0;
    		this.top  = 0;
    		this.width =0;
    		this.height=0;
    	};
    
    	Board.prototype.render = function(ctx){
    		if(game.selected){
    
    			var shapeWidth = this.width/3;
    
    			ctx.fillStyle = game.palette.color1;
    			ctx.strokeStyle = game.palette.color1;
    			var fontSize =  14;
    			ctx.font = 'bold '+ fontSize +'px Noto Sans';
    			ctx.textAlign='center';
    			ctx.lineWidth=8;
    			ctx.lineJoin = 'round';
    			ctx.strokeRect(this.left + this.width/2 - (shapeWidth/2),this.height/2-(shapeWidth/2) + this.top,shapeWidth,shapeWidth);
    			ctx.fillText(game.selected.text,this.left + this.width/2,this.height/2 + this.top );
    		}
    	};
    
    	this.board =  new Board();
    };
    
    Game.prototype.initialSideButtons = function(){
    	var game = this;
    	var ButtonBar =function(text){
    		this.text = text;
    		this.left = 0;
    		this.top  = 0;
    		this.width = 1;
    		this.height= 1;
    		this.selected=false;
    	};
    
    	ButtonBar.prototype.hitTest=function(x,y){
    		return 	(this.left < x) && (x < (this.left + this.width)) &&
    				(this.top  this.width / 2
    	this.board.height= this.height - this.title.height - this.footer.height;
    
    	this.sideButtons.left= this.board.width;
    	this.sideButtons.top = this.board.top;
    	this.sideButtons.width = this.width - this.board.width;
    	this.sideButtons.height = this.board.height;
    
    	this.render();
    };
    
    
    var game = new Game('game',window.innerWidth -50,window.innerWidth * 2/3);
    
    window.addEventListener('resize', function(){
    	game.resize(window.innerWidth -50,window.innerWidth * 2/3);
    });
    	

提交回复
热议问题