我正在用JavaScript上课。我想创建2个用户,每个用户都有一个武器,然后在班级内部创建一个功能来攻击每个玩家,并通过各自的武器伤害来降低其生命值。我正在尝试在3个不同的文件中执行此操作,我要做的就是将User类与Gun类合并,以将武器归于用户。但是我不知道该怎么做。我想要这样的东西:
let John = new User("John", "Sniper);
let Michael = new User("Michael", "Shotgun");
John.attack("Michael");
然后我想在类中创建附加功能很有趣,但是首先我需要弄清楚如何在User类中为用户添加武器:)
我想提供我尝试过的内容,但我找不到解决方法..
main.js
import Gun from '/js/gun.js';
import User from '/js/user.js';
let players = [ new User("Mic", "sniper"), new User("AI", "rifle") ];
players[0].shootAt(players[1]);
players[1].shootAt(players[0]);
user.js
export default class User{
constructor(userName, Gun){
this.name = userName;
this.health = 50;
console.log(this.name + ' was created with ' + this.health + ' health');
}
shootAt(target){
target.health -= gun.damage;
}
}
gun.js
export default class Gun{
constructor(){
this.sniper = {
damage : 150,
magazine : 7,
fireRate : 1.5
}
this.rifle = {
damage : 25,
magazine : 30,
fireRate : .05
}
}
}
这不起作用:
let players = [ new User("Mic", "sniper"), new User("AI", "rifle") ];
players[0].shootAt(players[1]);
players[1].shootAt(players[0]);
但这是我要寻找的结果。请帮助!
最佳答案
您看到的问题是因为您实际上没有在创建带有任何属性的新Gun
对象,而只是将字符串传递给User
类,并且无法从gun类访问属性。
对于Gun
类,您需要确保可访问项目,并且记住枪支类型。您需要在gunType
中添加类似Gun
属性的内容,然后在User
中将其枪支也存储在属性中。
看下面的代码,我为Gun
属性添加了一些基本的吸气剂,这些吸气剂使用gunType
检索当前枪支的数据。如果您使用不支持的类型,它将下降,因此您需要按照Poliwhril先生的建议扩展该区域或通过扩展Gun
类来创建枪支类型。然后,我将新的Gun
对象传递给User
对象,并将它们存储在gun
属性中,以备后用。
class User{
constructor(userName, Gun){
this.name = userName;
this.health = 50;
this.gun = Gun;
console.log(this.name + ' was created with ' + this.health + ' health');
}
shootAt(target){
target.health -= this.gun.damage;
}
}
class Gun{
constructor( gunType ){
this.sniper = {
damage : 150,
magazine : 7,
fireRate : 1.5
}
this.rifle = {
damage : 25,
magazine : 30,
fireRate : .05
}
this.gunType = gunType;
}
get damage() {
return this[ this.gunType ].damage;
}
get magazine() {
return this[ this.gunType ].magazine;
}
get fireRate() {
return this[ this.gunType ].fireRate;
}
}
players = [ new User("Mic", new Gun( "sniper") ), new User("AI", new Gun( "rifle" ) ) ];