- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经设置了一个塔防游戏并获得了它,这样你就可以放下塔,敌人就会向你袭来。但是,塔楼正在对其半径内的所有怪物造成伤害。我希望塔楼只对其周围的一个敌人造成伤害。
我设置了两个变量:monsterList 和 towerList。它们都是对象,我已经将其设置为在特定事件时,它将向指定变量添加敌人或塔。因此,当您选择一个空白区域来放置塔时,它会向列表中添加一个对象变量。当您单击下一个级别时也会发生这种情况,但它会创建可以在路径中移动的动态怪物。它看起来有点像这样:
//the variables
var monsterList = {};
var towerList = {};
//how towers or enemies are added
var Monster = {
x:10,
y:10,
type:"Red",
id:Math.random()
}
monsterList[Monster.id] = Monster;
所以,这就是我创建怪物的方式,同样的方式,但有不同的参数,对于一座塔来说。当怪物沿着路径进入塔的范围内时,塔将攻击其范围内的所有怪物。我希望它只锁定其范围内的 1 个怪物。以下是我的碰撞设置方法:
//loops through all the monsters and towers and tests if any of them are
//colliding. If they are colliding, it will decrease the monster's health by
//1/30 of the tower's damage. This is because I have an interval looping
//through this code 30 times a second. So, it deals the damage per second.
for(var key in monsterList){
for(var i in towerList){
if( Collision(towerList[i], monsterList[key]) ){
monsterList[key].health -= ( towerList[i].damage/30 );
}
if( monsterList[key].health <= 0 ) delete monsterList[key];
}
}
//and this is the Collision() function. It pretty much returns true if the
//monster is within the tower's range which is defined by an argument to the
//tower called radius.
function Collision(tower, monster){
return ((monster.y >= (tower.y - tower.radius*20)) &&
(monster.x >= (tower.x - tower.radius*20)) &&
(monster.y <= (tower.y + tower.height + tower.radius*20)) &&
(monster.x <= (tower.x + tower.width + tower.radius*20)));
}
感谢您的帮助!
最佳答案
你的塔上需要这样的东西:
var tower = {
... //your tower properties
target: null
}
然后在循环中:
for(var key in monsterList){
for(var i in towerList) {
if( !towerList[i].target && Collision(towerList[i], monsterList[key]) ) {
towerList[i].target = key;
monsterList[key].health -= ( towerList[i].damage/30 );
}
if( towerList[i].target ) {
monsterList[towerList[i].target].health -= ( towerList[i].damage/30 );
}
if( monsterList[key].health <= 0 )
delete monsterList[key];
}
}
您还可以以更易读的方式编写循环:
monsterList.forEach(function(monster) {
towerList.forEach(function(tower) {
if (!tower.target && Collision(tower, monster)
tower.target = monster
if (tower.target)
tower.target.health -= tower.damage / 30;
if (tower.target.health <= 0) {
var monsterIndex = monsterList.indexOf(tower.target);
delete monsterList[monsterIndex];
}
});
});
关于javascript - 如何让玩家锁定其半径内的一个敌人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199205/
好的,这就是我的错误:'Enemy' 未在此范围内声明。错误在 map.h 文件中,即使 map.h 包含 enemy.h,如图所示 #ifndef MAP_H_INCLUDED #define MA
这个问题已经有答案了: How to make enemy follow player in pygame? (2 个回答) Enemy doesn't follow player (pygame)
我试图让我的 Canvas 游戏中的 Sprite 不断向玩家移动,直到它发生碰撞。执行此操作的相关函数是 update() 函数: Enemy.prototype.update = function
我在无休止的运行游戏中遇到了麻烦,主要是我创建的两种敌人的产卵,当我们调用函数“startDifficultyTimer”时,有时会产生两个敌人。 基本上,当我调用该函数时,游戏会在同一行生成 2 个
从性能角度来看,什么是最正确的 - 敌人和武器之间的交互算法(这里的子弹可能更正确)? 每个 Sprite 的每一个子弹都应该通过“collidesWith”方法检查碰撞情况,并在完整的敌人列表上进行
遇到了一个问题,即敌人会向玩家开火,但似乎总是开到高处或向玩家的一侧,即使玩家是静止的并且没有移动。我是不是在我的代码中做错了什么导致了这个疯狂的问题,或者它只是一个随机的烦人的错误? 为播放器使用相
我是新来的快速编程。我想使用类节点将敌人生成到随机位置。我试图搜索随机生成敌人的代码,但它似乎与我的代码无关。 这是我搜索随机生成的代码。 import SpriteKit class GameSce
我最近遇到了一些问题,只是在我正在制作的游戏中传递对对象/敌人的引用,我想知道我是否使用了错误的方法。 我的主要问题是处理敌人和物体,而其他敌人或玩家可能仍然与它们有联系。 例如,如果你有一只兔子和一
在我的 2d 游戏中,我有一个金币和铜币的概念如下: when normal enemies die ..they drop a random gold or copper coin. Now whe
我是新来的,所以我希望你能帮助我。 我正在学习制作简单的 cocos2d 游戏的教程 Ray Wenderlich's Tutorial 我在另一个游戏中实现了它,一个像涂鸦跳跃这样的跳跃游戏。 在上
我是一名优秀的程序员,十分优秀!