我正在用JavaScript创建游戏。当用户单击向上箭头时,它将发射导弹。用户应该能够单击UP箭头,并且每次单击都应该发射一枚新导弹。我有一个“导弹”对象和一个“导弹”数组。导弹物体具有发射功能。
下面的行在setInterval中使用时给我一个错误。当我注释掉setInterval时,它没有问题。
错误消息:game.js:21
未捕获到的TypeError:无法读取game.js:21中未定义的属性“样式”
错误行:this.image.style.left=this.leftPos+'px';
var missile = {
leftPos: 0,
bottomPos: 0,
image: null,
id: null,
launch: function () {
setInterval(function () {
this.image.style.left = this.leftPos + 'px';
this.image.style.bottom = this.bottomPos + 'px';
this.leftPos += 0.5;
this.bottomPos += 1;
}, 10);
}
};
在某个地方,我称之为: currMissile = missiles [missiles.length-1]; currMissile.launch();
答案 0 :(得分:0)
此上下文未引用对象"""
# snippet for testing <class:Sample>
"""
from flask import Flask
app = Flask(__name__)
app.config.from_mapping(
SQLALCHEMY_ECHO=True,
SQLALCHEMY_TRACK_MODIFICATIONS=False,
SQLALCHEMY_DATABASE_URI='sqlite:///test_orm.sqlite.db',
)
db.init_app(app=app)
db.app = app
db.create_all()
d1 = dict(
tags='["python2","flask"]',
models='["m1"]'
)
m1 = Sample(**d1)
print(1111, type(m1.tags), m1.tags)
m1.save()
print(1112, type(m1.tags), m1.tags)
dm1 = Sample.query.filter(Sample.id == m1.id).all()[0]
print(1113, dm1, type(dm1.tags), dm1.tags)
## fixme[Q1] !!!
## if not continue with $d2, it won't raise error of UPDATE $d1
d2 = dict(
tags='["python3","flask"]',
models='["m2", "m3"]'
)
m2 = Sample(**d2)
print(2221, type(m2.tags), m2.tags)
## fixme[Q1] !!!
# db.session.close()
## If session was not closed, error raise here.
m2.save()
print(2222, type(m2.tags), m2.tags)
dm2 = Sample.query.filter(Sample.id == m2.id).all()[0]
print(2223, dm2, type(dm2.tags), dm2.tags)
,此外,我可以看到您多次用同一对象填充数组,这意味着该数组中的所有索引都指向同一对象,依靠错误。
每当用户按下UP键时,您应该实例化一个新对象。
例如
missile
var Missile = function() {
this.leftPos = 0;
this.bottomPos = 0;
this.image = { // Example
style: {
left: 4,
bottom: 34
}
};
this.id = null;
this.launch = function() {
setInterval(() => { // Use arrow function to get access to Missile lexical context.
this.image.style.left = this.leftPos + 'px';
this.image.style.bottom = this.bottomPos + 'px';
this.leftPos += 0.5;
this.bottomPos += 1;
console.log(this.image.style.left);
}, 500);
};
};
new Missile().launch();