- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的简单 JavaScript/HTML 5 游戏中,我认为存在更新错误,但我不知道如何修复。问题是没有真正的错误,它只是没有按照我想要的方式响应代码。问题是,我想要一个屏幕 GUI,显示 map 上杀死的敌人数量。到目前为止,我已经有了 GUI 了。这是游戏图片:
/image/0rx4d.png[屏幕上显示 3 个敌人、右上角的 GUI 和玩家。]
现在的问题是,每当我杀死敌人时,数字就会增加,但当然不会。这是我的代码:
window.addEventListener("load",function() {
var EKL1 = 0; // Enemies Killed Level 1
var Q = window.Q = Quintus()
.include("Sprites, Scenes, Input, 2D, Anim, Touch, UI, TMX")
.setup({ maximize: true })
.controls().touch()
Q.Sprite.extend("Player",{
init: function(p){
this._super(p, {
sprite: "player",
sheet: "player",
speed: 150,
x: 410,
y: 90
});
this.add('2d, platformerControls, animation');
},
step: function(dt){
if(this.p.vx > 0){
this.play("walk_right");
this.p.direction = "right";
} else if(this.p.vx < 0){
this.play("walk_left");
this.p.direction = "left";
} else {
this.play("stand_" + this.p.direction);// + this.p.direction > 0 ? "right" : "left");
}
}
});
Q.Sprite.extend("Enemy",{
init: function(p) {
this._super(p, {
sprite: "enemy",
sheet: "enemy",
vx: 100
});
// Enemies use the Bounce AI to change direction
// whenver they run into something.
this.add('2d, aiBounce');
// Listen for a sprite collision, if it's the player,
// end the game unless the enemy is hit on top
this.on("bump.left,bump.right,bump.bottom",function(collision) {
if(collision.obj.isA("Player")) {
//Q.stageScene("endGame",1, { label: "You Died" });
collision.obj.destroy();
}
});
// If the enemy gets hit on the top, destroy it
// and give the user a "hop"
this.on("bump.top",function(collision) {
if(collision.obj.isA("Player")) {
this.destroy();
collision.obj.p.vy = -300;
//Increasing Enemies killed on destroy
EKL1++;
}
});
}
});
Q.scene("UIContainers", function(stage){
var container = stage.insert(new Q.UI.Container({
fill: "gray",
border: 2,
shadow: 3,
shadowColor: "rgba(0,0,0,0.5)",
y: Q.height/10,
x: Q.width/1.25
}));
stage.insert(new Q.UI.Text({
label: "Enemies killed: " + EKL1.toString(),
color: "black",
x: 0,
y: 0
}),container);
container.fit(20,20);
});
Q.scene("level1", function(stage){
stage.insert(new Q.Repeater({ asset: "background-wall.png", speedX: 0.5, speedY: 0.5 }));
Q.stageScene("UIContainers", 1);
stage.collisionLayer(new Q.TileLayer({ dataAsset: 'level.json', sheet: 'tiles' }));
var player = stage.insert(new Q.Player());
stage.insert(new Q.Enemy({ x: 700, y: 0 }));
stage.insert(new Q.Enemy({ x: 800, y: 0 }));
stage.insert(new Q.Enemy({ x: 500, y: 0 }));
stage.add("viewport").follow(player);
});
Q.load("sprites.png, sprites.json, enemy.png, enemy.json, level.json, tiles.png, background-wall.png", function(){
Q.sheet("tiles","tiles.png", { tilew: 32, tileh: 32 });
Q.compileSheets("sprites.png", "sprites.json");
Q.compileSheets("enemy.png", "enemy.json");
Q.animations("player", {
walk_right: {frames: [0, 1, 2, 3], rate: 1 / 4, flip: false, loop: true },
walk_left: {frames: [0, 1, 2, 3], rate: 1 / 4, flip:"x", loop: true },
stand_right: {frames: [0], rate: 1 / 4, flip: false, loop: true},
stand_left: {frames: [0], rate: 1 / 4, flip: "x", loop: true}
});
Q.stageScene("level1");
});
});
代码当然是用 JavaScript 编写的,但它由 Quintus 游戏引擎运行,可以在此处找到:http://html5quintus.com/
这就是我试图让它工作的方式,所以我创建了一个名为 EKL1(敌人被杀死级别 1)的全局变量,它返回/等于 0。这个全局变量在底部的 Enemy 函数中访问,其中玩家与敌人发生碰撞。它说如果玩家击中敌人的顶部,敌人就会被摧毁。所以我所做的就是在 if 语句中添加以下内容:EKL1++ 来摧毁敌人。我将其转换为字符串并将其运行到控制台,它成功了!我杀了一个敌人,它显示 1,杀了另一个敌人,然后显示 2,最后我杀了最后一个,它显示 3。现在我当然必须将其实现到屏幕上的 GUI 中。所以我所做的就是创建一个 UIContainer 函数来保存我所有的 GUI。我在容器上插入了一个标签,如您所见,然后将标签文本设置为:
“敌人被杀:” + EKL1.toString();
这不需要字符串变量,将整数转换为字符串。我以为这会起作用,但是当我杀死一个怪物时它并没有上升。我相信其原因是容器在屏幕上绘制一次,因此它不会更新。这意味着当我杀死怪物时它不会更新容器。我不知道如何实现更新功能或其他东西来使其正常工作。
如果有人知道解决此问题的答案,请回复!我希望这不是一个很难解决的问题。
感谢您的宝贵时间,
~ jackson ·万迪
最佳答案
您的字符串 "Enemies killed: " + ELK1.toString()
将进行评估,评估后对 ELK 的任何更改都不会对标签产生影响。但不用担心,有解决方案。 Quintus 有一个“游戏状态”存储,名为 Q.state
。还有一些事件处理,以防您的游戏状态发生变化。我在下面添加了一些代码,这应该为您提供有关在何处更改代码的粗略指导。
var Q = // ...
// 1. after initialization of Q, create Q.state containing 'enemiesKilled'
Q.state.reset({
enemiesKilled: 0
});
// ...
// 2. one change in your Enemy Sprite is needed...
Q.Sprite.extend("Enemy",{
// ...
this.on("bump.top",function(collision) {
if(collision.obj.isA("Player")) {
this.destroy();
collision.obj.p.vy = -300;
// 3. increment your state variable
Q.state.inc("enemiesKilled");
}
});
}
// ...
// 4. extend Q.UI.Text class...
Q.UI.Text.extend("EnemiesKilledLabel", {
init: function(p) {
this._super({
label: "Enemies Killed: 0",
// ...
});
// 5. add a listener for changes on your state...
Q.state.on("change.enemiesKilled",this,"enemiesKilledChange");
},
// 6. ...and the handler
enemiesKilledChange: function(enemiesKilled) {
this.p.label = "Enemies Killed: " + enemiesKilled;
}
};
// ... etc.
请注意始终使用Q.state.set(...)
, Q.state.get(...)
或像Q.state.inc(...)
这样的便捷方法,这样 Quintus 就可以触发 change.<state>
事件。
最好看看http://html5quintus.com/guide/core.md ,“游戏状态”部分。
关于javascript - Quintus JavaScript 编程 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101947/
我正在尝试打印 timeval 类型的值。实际上我可以打印它,但我收到以下警告: 该行有多个标记 格式“%ld”需要“long int”类型,但参数 2 的类型为“struct timeval” 程序
我正在编写自己的 unix 终端,但在执行命令时遇到问题: 首先,我获取用户输入并将其存储到缓冲区中,然后我将单词分开并将它们存储到我的 argv[] 数组中。IE命令是“firefox”以启动存储在
我是 CUDA 的新手。我有一个关于一个简单程序的问题,希望有人能注意到我的错误。 __global__ void ADD(float* A, float* B, float* C) { con
我有一个关于 C 语言 CGI 编程的一般性问题。 我使用嵌入式 Web 服务器来处理 Web 界面。为此,我在服务器中存储了一个 HTML 文件。在此 HTML 文件中包含 JavaScript 和
**摘要:**在代码的世界中,是存在很多艺术般的写法,这可能也是部分程序员追求编程这项事业的内在动力。 本文分享自华为云社区《【云驻共创】用4种代码中的艺术试图唤回你对编程的兴趣》,作者: break
我有一个函数,它的任务是在父对象中创建一个变量。我想要的是让函数在调用它的级别创建变量。 createVariable testFunc() [1] "test" > testFunc2() [1]
以下代码用于将多个连续的空格替换为1个空格。虽然我设法做到了,但我对花括号的使用感到困惑。 这个实际上运行良好: #include #include int main() { int ch, la
我正在尝试将文件写入磁盘,然后自动重新编译。不幸的是,某事似乎不起作用,我收到一条我还不明白的错误消息(我是 C 初学者 :-)。如果我手动编译生成的 hello.c,一切正常吗?! #include
如何将指针值传递给结构数组; 例如,在 txt 上我有这个: John Doe;xxxx@hotmail.com;214425532; 我的代码: typedef struct Person{
我尝试编写一些代码来检索 objectID,结果是 2B-06-01-04-01-82-31-01-03-01-01 . 这个值不正确吗? // Send a SysObjectId SNMP req
您好,提前感谢您的帮助, (请注意评论部分以获得更多见解:即,以下示例中的成本列已添加到此问题中;西蒙提供了一个很好的答案,但成本列本身并未出现在他的数据响应中,尽管他提供的功能与成本列一起使用) 我
我想知道是否有人能够提出一些解决非线性优化问题的软件包的方法,而非线性优化问题可以为优化解决方案提供整数变量?问题是使具有相等约束的函数最小化,该函数受某些上下边界约束的约束。 我已经在R中使用了'n
我是 R 编程的初学者,正在尝试向具有 50 列的矩阵添加一个额外的列。这个新列将是该行中前 10 个值的平均值。 randomMatrix <- generateMatrix(1,5000,100,
我在《K&R II C 编程 ANSI C》一书中读到,“>>”和“0; nwords--) sum += *buf++; sum = (sum >>
当下拉列表的选择发生变化时,我想: 1) 通过 div 在整个网站上显示一些 GUI 阻止覆盖 2)然后处理一些代码 3) 然后隐藏叠加层。 问题是,当我在事件监听器函数中编写此逻辑时,将执行 onC
我正在使用 Clojure 和 RESTEasy 设计 JAX-RS REST 服务器. 据我了解,用 Lisp 系列语言编写的应用程序比用“传统”命令式语言编写的应用程序更多地构建为“特定于领域的语
我目前正在研究一种替代出勤监控系统作为一项举措。目前,我设计的用户表单如下所示: Time Stamp Userform 它的工作原理如下: 员工将选择他/她将使用的时间戳类型:开始时间、超时、第一次
我是一名学生,试图自学编程,从在线资源和像您这样的人那里获得帮助。我在网上找到了一个练习来创建一个小程序来执行此操作: 编写一个程序,读取数字 a 和 b(长整型)并列出 a 和 b 之间有多少个数字
我正在尝试编写一个 shell 程序,给定一个参数,打印程序的名称和参数中的每个奇数词(即,不是偶数词)。但是,我没有得到预期的结果。在跟踪我的程序时,我注意到,尽管奇数词(例如,第 5 个词,5 %
只是想知道是否有任何 Java API 可以让您控制台式机/笔记本电脑外壳上的 LED? 或者,如果不可能,是否有可能? 最佳答案 如果你说的是前面的 LED 指示电源状态和 HDD 繁忙状态,恐怕没
我是一名优秀的程序员,十分优秀!