所以我一直在努力解决这个问题,大约8个小时。我有课。它具有功能。我调用了该函数。它说该功能不存在。什么?
代码如下:
class Player1 extends Character{
constructor(maxHealth,maxEnergy,sprites,x,y,vel,facingRight){
super(maxHealth,maxEnergy,sprites,x,y,vel,facingRight);
}
//move
movement() {
window.onkeydown = function (e){
window.addEventListener('keydown', function (e) {
keys = (keys || []);
keys[e.keyCode] = (e.type == "keydown");
})
window.addEventListener('keyup', function (e) {
keys[e.keyCode] = (e.type == "keydown");
})
//vertical
if (keys && keys[87])
{
if(this.y-this.vel>0)
{
this.moveUp();
}
}
else if (keys && keys[83])
{
if(this.y+this.vel<444)
{
this.moveDown();
}
}
//horizontal
if (keys && keys[65])
{ if(this.x-this.vel>0)
{
this.moveLeft();
}
}
if(keys && keys[68])
{
if(this.x+this.vel>screenWidth)
{
this.moveRight();
}
}
//charge
if(keys && keys[66])
{
this.charge();
}
//shoot
if(keys && keys[32])
{
if(this.shootDelay==0){
if(this.blastCount<10){
this.shoot();
}
} else if (this.shootDelay>5)
{
this.shootDelay=0;
}
this.shootDelay++;
}
if(!(keys && keys[32])&&!(keys && keys[66])&&!(keys && keys[68])&&!(keys && keys[65])&&!(keys && keys[83])&&!(keys && keys[87])){
this.idle();
}
}
if(this.dead==true)
{
this.dead();
}
}
};
所以我不明白为什么它在清晰可见的地方却无法识别该功能。 这是窗口加载时调用的函数。
window.onload = function () {
let p1 = new Player1(100, 100, GokuSpriteList, 24, 492, 5, true);
let p2 = new Player2(100, 100, GokuBlackSpriteList, 1000, 492, 5, false);
getSprites();
update(p1, p2);
};
这是更新画布屏幕的功能。这也是调用移动功能的地方。
function update(p1,p2)
{
var c=document.getElementById("screen");
var ctx=c.getContext("2d");
clearCanvas(ctx);
p1.movement();
p2.movement();
p1.draw(ctx);
p2.draw(ctx);
p1.removeBlast();
p2.removeBlast();
for(i=0;i<p1.blastCount;i++)
{
p1.blastList[i].draw(ctx);
}
for(i=0;i<p2.blastCount;i++)
{
p2.blastList[i].draw(ctx);
}
requestAnimationFrame(update);
};
让我知道你们是否能解决。我会去学习数学考试。谢谢。
答案 0 :(得分:0)
使用import I2C_LCD_driver
import time
import pigpio
mylcd = I2C_LCD_driver.lcd()
Debounce = 0.5
Input23 = 23
Input24 = 24
Input17 = 17
Output18 = 18
Output4 = 4
pi_GPIO = pigpio.pi()
pi_GPIO.set_mode(Input23, pigpio.INPUT)
pi_GPIO.set_pull_up_down(Input23 , pigpio.PUD_UP)
pi_GPIO.set_mode(Input24, pigpio.INPUT)
pi_GPIO.set_pull_up_down(Input24 , pigpio.PUD_UP)
pi_GPIO.set_mode(Input17, pigpio.INPUT)
pi_GPIO.set_pull_up_down(Input17 , pigpio.PUD_UP)
pi_GPIO.set_mode(Output18, pigpio.OUTPUT)
pi_GPIO.set_mode(Output4, pigpio.OUTPUT)
while True:
if pi_GPIO.read(Input23):
pi_GPIO.write(18, 0)
mylcd.lcd_clear()
mylcd.lcd_display_string("Input 1 Active", 1)
time.sleep(Debounce)
else:
pi_GPIO.read(Input23)
pi_GPIO.write(18, 1)
mylcd.lcd_clear()
mylcd.lcd_display_string("Awaiting Input", 1)
mylcd.lcd_display_string("Detection", 2)
time.sleep(Debounce)
时会丢失对p1, p2
的引用
您无法通过requestAnimationFrame(update)
将参数传递给更新函数,因此您需要以其他方式维护引用。
有很多方法可以保留参考。简单的方法是使requestAnimationFrame(update)
,p1
成为全局变量,但这并不总是最好的方法。
您可以使用闭包来保存它们。有关更多信息,请参见代码注释。
p2