如何重构此 JS
How can I refactor this JS?
理想情况下,我会在父类(播放器)中有一个绘制方法
但是我不知道该怎么做。我不知道是否有办法完全解耦。.欢迎任何想法。我不介意修改精灵表,以便它可以处理这种事情。
非常欢迎任何提示!!
两个类都继承自播放器
var skeleton = Player(x, y, hp, name, moveSpeed);
//drawing the fly
var draw = function(ctx) {
if (flyAnimate >= 30){
flyAnimate = 0;
}
var bugX = canvas.width/2 + fly.getDrawAtX() - localX - 50;
if (fly.getAlive()){
ctx.fillStyle="#FF0000";
ctx.fillRect(bugX+30,fly.getDrawAtY()-50,((fly.getHp()/2.2)),6);
} else {
ctx.fillText("DEAD", bugX + 37, fly.getDrawAtY()-40);
}
if (flyAnimate <= 10){
ctx.drawImage(flySprite,0,0, 100, 100, bugX,fly.getDrawAtY()-50, 100, 100);
}
else if (flyAnimate <= 20){
ctx.drawImage(flySprite,100,0, 100, 100, bugX,fly.getDrawAtY()-50, 100, 100);
}
else if (flyAnimate <= 30){
ctx.drawImage(flySprite,200,0, 100, 100, bugX,fly.getDrawAtY()-50, 100, 100);
}
ctx.drawImage(silverShield, bugX+ 20, fly.getDrawAtY()-3);
if (descendAttack || rightMouseActionHappening){
if (!rightMouseActionHappening){
rightMouseActionHappening = true;
}
//200 is pretty badass
}
if (descendAttack) {
ctx.save();
ctx.translate(bugX+60, fly.getDrawAtY()-40 + 90);
ctx.rotate(Math.PI);
ctx.drawImage(silverSword, 0, -10);
ctx.restore();
} else {
ctx.drawImage(silverSword, bugX+ 60, fly.getDrawAtY()-40);
}
flyAnimate++;
ctx.fillStyle = "black";
ctx.font = "bold 13px sans-serif";
ctx.fillText(name, bugX + 22, fly.getDrawAtY()-60);
};
// drawing what I call a redhatter
var draw = function(ctx) {
//var drawAtX = skeleton.getX()-50;
if (skeleton.getMoveDirection() === "left"){
facing_left = true;
} else if (skeleton.getMoveDirection() === "right"){
facing_left = false;
}
if (facing_left){
spritesheet_offset_y = 102;
}
else {
spritesheet_offset_y = 0;
}
var drawAtX = canvas.width/2 + skeleton.getDrawAtX() - localX - 50;
if (skeleton.getAlive()){
ctx.fillStyle="#FF0000";
ctx.fillRect(drawAtX+30,skeleton.getY()-50,((skeleton.getHp()/2.2)),6);
ctx.fillStyle = "black";
} else { /* If it's dead, just write DEAD */
ctx.fillText("DEAD", drawAtX + 37, skeleton.getY()-40);
}
ctx.fillStyle = "black";
ctx.font = "bold 13px sans-serif";
ctx.fillText(name, drawAtX + 25, skeleton.getY()-60);
/* Decides what sprite to draw*/
if (skeleton.getAnimate() <= 20){
ctx.drawImage(RedhatterSprite,0,spritesheet_offset_y, 100, 100, drawAtX,skeleton.getY()-50, 100, 100);
}
else if (skeleton.getAnimate() <= 40){
ctx.drawImage(RedhatterSprite,100,spritesheet_offset_y, 100, 100, drawAtX,skeleton.getY()-50, 100, 100);
}
else if (skeleton.getAnimate() <= 60){
ctx.drawImage(RedhatterSprite,200,spritesheet_offset_y, 100, 100, drawAtX,skeleton.getY()-50, 100, 100);
} else{
ctx.drawImage(RedhatterSprite,200,spritesheet_offset_y, 100, 100, drawAtX,skeleton.getY()-50, 100, 100);
}
};
以下是完整的来源: https://github.com/hassanshaikley/amara-game
好吧,只需创建一个新对象来处理这个重大责任。之后,将每个 if else 语句分成方法。将主对象作为引用传递,以便您仍然可以拥有其实例。
var drawAtX = canvas.width/2 + skeleton.getDrawAtX() - localX - 50;
if (skeleton.getAlive()){
ctx.fillStyle="#FF0000";
ctx.fillRect(drawAtX+30,skeleton.getY()-50,((skeleton.getHp()/2.2)),6);
ctx.fillStyle = "black";
} else { /* If it's dead, just write DEAD */
ctx.fillText("DEAD", drawAtX + 37, skeleton.getY()-40);
}
ctx.fillStyle = "black";
ctx.font = "bold 13px sans-serif";
ctx.fillText(name, drawAtX + 25, skeleton.getY()-60);
自
var someObject = new Object();
someObject.prototype.drawText = function() {
};
相关文章:
- 使用递归、Ramda.js和无点样式重构字符串的getPermutations()
- 重构DRY代码的Node.JS回调
- 在JavaScript中重构上个月的第一天和最后一天的代码(node.js)
- 重构 jQuery in JS 问题
- 重构 require.config.js 文件
- Javascript 单元测试和重构(使用 Angular js 框架)
- 将 PHP 函数的 3 小位重构为 JS - 数组,如果为空且匹配 url
- 如何重构此 JS
- 骨干网.js并正确重构
- JavaScript/jQuery - 如何改进这个 js 代码/重构
- Phantom.js回调在Node.js/Express.js上重构Phantom.js时引用错误;回调地狱”;
- 重构JS对象以适应绑定MVC模型
- 最佳实践:重构移动应用程序(JS、jquery、PHP)的工作流
- 重构JS代码
- 我如何重构我的控制器.js,所以我有每个控制器在一个单独的文件
- 如何重构JS对象?
- 在javascript中使用.map或underscore.js重构while循环
- 如何在helper中使用unobustrive JS重构link_to_function
- intern.js重构到before块的行为不一致
- 我如何使用ramda.js重构这段代码?