- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名文凭学生,正在制作一个基于处理的游戏,这是一款塔防游戏,女主角将向冲向城堡的僵尸射箭。我对此有多个问题。
据说我希望僵尸在一群被击落后反复地一波又一波地产生,然后我希望充电器僵尸单独死亡,具体取决于我点击的僵尸。
这是我的源代码:
import processing.opengl.*; // transparency
import gifAnimation.*; // after add gifAnimation library
import ddf.minim.*; // importing music
PImage backgroundImg;
PImage animation;
int counter;
//settings
int score = 50, totalScore = 0;
int titleX = 200, titleY = 200;
boolean shotsFired = false;
PFont scorePoints, castleHealthPoints, font; //font for startingScreen
int chargerKilled;
//Charger class
int maxChargerOnScreen;
Charger[] chargerArr; //chargerArray undefined
int chargerIndex;
final int numCharger = 300;
ArrayList<Charger> onScreen = new ArrayList<Charger>();
boolean chargerReachedTarget = false, chargerShot = false, chargerDive = true;
Gif chargerCharge, chargerAttack, chargerDied, shootingStance;
int chargerMoveX = 800, chargerMoveY = 450;
// CastleWallHealth
int castleHealth = 1000;
// audio
Minim minim;
AudioPlayer song;
AudioSnippet arrowShoot;
//-------------------------------Codes start here --------------------------------------------------//
void setup() {
//ipad mini size
// frameRate(10);
frameRate(60);
size(800, 600);
smooth();
minim = new Minim(this);
// song = minim.loadFile("InGameSoundtrack.mp3");
// song.play();
arrowShoot = minim.loadSnippet("arrowSound1.wav");
backgroundImg = loadImage("GameBackground.jpg");
backgroundImg.resize(800, 600);
chargerCharge = new Gif(this, "ChargerCharge.gif");
chargerAttack = new Gif(this, "ChargerAttack.gif");
chargerDied = new Gif(this, "ChargerDie.gif");
gargoyleFly = new Gif(this, "GargoyleFly.gif");
gargoyleAttack = new Gif(this, "GargoyleAttack.gif");
shootingStance = new Gif(this, "ShootingGif.gif");
scorePoints = createFont("Arial", 16, true);
castleHealthPoints = createFont("Arial", 16, true);
// loopingGif.play() plays the animation without loop
// must make charger
chargerCharge.play();
chargerAttack.play();
chargerDied.play();
resetGames(); // starts with respawning 5 charges
}
void draw() {
// backgroud
background(backgroundImg);
image(shootingStance, 120,200);
// scores and health
textFont(scorePoints, 15);
fill(0);
text("Score: " + totalScore, 100, 100);
displayCastleHealth();
//*********************************************charger settings code********************************************************************
// If there's no more zombies. prompt reset (screen no zombies) , index from 0 add till 300 then game won
if (onScreen.size() == 0 && chargerIndex == numCharger) {
println("Game won! :)");
// gameWon = true;
}
// while onScreen charger less than 5 only and chargerIndex havent reach 300 it will only respawn
while (onScreen.size () < maxChargerOnScreen && chargerIndex <= numCharger - 1) {
if (chargerIndex < chargerArr.length) { // <--- this is the problem chargerArrayLength
Charger chargerMobs = chargerArr[chargerIndex];
// starts from chargerArray[0] to chargerArray[300]
onScreen.add(chargerMobs);
chargerIndex++;
// chargerIndex keeps looping why?
// println("ADDED ZOMBIE TO ONSCREEN Zombs on screen: " + onScreen.size());
}
}
// Adjusts maxZombOnScreen based off the current index Difficulties?
if (chargerIndex == 10)
maxChargerOnScreen++;
else if (chargerIndex == 50)
maxChargerOnScreen++;
else if (chargerIndex == 100)
maxChargerOnScreen += 2;
else if (chargerIndex == 150)
maxChargerOnScreen += 2;
else if (chargerIndex == 190)
maxChargerOnScreen += 3;
else if (chargerIndex == 250)
maxChargerOnScreen += 3;
else if (chargerIndex == 260)
maxChargerOnScreen += 3;
else if (chargerIndex == 270)
maxChargerOnScreen += 5;
// removes dead zombies, living zombies act normally
for(int i = 0; i < onScreen.size(); i++) {
Charger c = onScreen.get(i);
// add money when a zombie is dead
// if (c.getHealth() <= 0)
if (chargerShot==true) {
c.chargerDying();
onScreen.remove(i);
chargerKilled++;
i--;
} else {
c.act(); ///it should just act
// c.displayHealth(); // if gt time only do
// }
}
}
// creating list of predetermined zombies and their characteristics
println("chargerIndex: " + chargerIndex); // debug
println("onScreenSize: " + onScreen.size());
// println("ChargerArray: " + chargerArray.length); chargerArray point null?
// cursor
if (mouseY > height - 500) {
noFill();
stroke(255, 0, 0);
ellipse(mouseX, mouseY, 35, 35);
line(mouseX - 25, mouseY, mouseX + 25, mouseY);
line(mouseX, mouseY - 25, mouseX, mouseY + 25);
}
}
void resetGames() {
// resetting variables
chargerIndex = 0;
maxChargerOnScreen = 5;
chargerKilled = 0;
createNewCharger();
}
void createNewCharger() {
Charger[] temp = new Charger[numCharger];
for (int i = 0; i < numCharger; i++)
temp[i] = new Charger((int) random(800, 1200), chargerMoveY);
chargerArr = temp;
}
//____________________________________________________________________________________________________________-
class Charger {
private int chargerMoveX, chargerMoveY;
Gif chargerGif; // by default
// chargerGif will change based on input (either it reaches the castle or its shot)
// no constructor
Charger() {
chargerMoveX = 0;
chargerMoveY = 450;
}
// overloaded constructor
Charger(int cMoveX,int cMoveY) {
chargerMoveX = cMoveX;
chargerMoveY = cMoveY;
}
void act() { // use
// if reached castle it wont move
if (chargerMoveX <= 180) {
// remove gif images
chargerDive = false;
chargerReachedTarget = true;
}
// if not shot or reached castle it will move
if (chargerDive == true) {
chargerGif = chargerCharge;
image(chargerGif, chargerMoveX, chargerMoveY);
chargerMoveX -= 2;
}
// if reached castle perform attack animation
if (chargerReachedTarget == true) {
chargerGif = chargerAttack;
image(chargerGif, chargerMoveX - 80, chargerMoveY - 120);
}
if (mousePressed &&
mouseX < chargerMoveX + 180
&& mouseX > chargerMoveX
&& mouseY < chargerMoveY + 120
&& mouseY > chargerMoveY) {
// score board
totalScore = totalScore + score ;
float r = random(50);
println(r);
chargerShot = true;
chargerDive = false;
}
}
void chargerDying() {
chargerReachedTarget = false;
chargerGif = chargerDied;
image(chargerGif, chargerMoveX, chargerMoveY);
}
}
void displayCastleHealth() {
if (castleHealth <= 0) {
fill(250, 70, 0);
textFont(castleHealthPoints, 20);
text("HP: 0", 100, 50);
} else {
fill(250, 70, 0);
textFont(castleHealthPoints, 20);
text("HP: " + castleHealth, 100, 50);
}
}
void mousePressed() {
strokeWeight(2);
arrowShoot.rewind();
arrowShoot.play();
for (int i = 0 ; i < 3; i++)
shootingStance.play();
shotsFired = true;
}
void mouseReleased() {
strokeWeight(1);
if (shotsFired == true)
shootingStance.pause();
}
public void stop() {
arrowShoot.close();
}
充电器的大部分问题都来自这里:
if (onScreen.size() == 0 && chargerIndex == numCharger) {
println("Game won! :)");
// gameWon = true;
}
// while onScreen charger less than 5 only and chargerIndex havent reach 300 it will only respawn
while (onScreen.size () < maxChargerOnScreen && chargerIndex <= numCharger - 1) {
if (chargerIndex < chargerArr.length) { // <--- this is the problem chargerArrayLength
Charger chargerMobs = chargerArr[chargerIndex];
// starts from chargerArray[0] to chargerArray[300]
onScreen.add(chargerMobs);
chargerIndex++;
// chargerIndex keeps looping why?
// println("ADDED ZOMBIE TO ONSCREEN Zombs on screen: " + onScreen.size());
}
}
// Adjusts maxZombOnScreen based off the current index Difficulties?
if (chargerIndex == 10)
maxChargerOnScreen++;
else if (chargerIndex == 50)
maxChargerOnScreen++;
else if (chargerIndex == 100)
maxChargerOnScreen += 2;
else if (chargerIndex == 150)
maxChargerOnScreen += 2;
else if (chargerIndex == 190)
maxChargerOnScreen += 3;
else if (chargerIndex == 250)
maxChargerOnScreen += 3;
else if (chargerIndex == 260)
maxChargerOnScreen += 3;
else if (chargerIndex == 270)
maxChargerOnScreen += 5;
// removes dead zombies, living zombies act normally
for(int i = 0; i < onScreen.size(); i++) {
Charger c = onScreen.get(i);
// add money when a zombie is dead
// if (c.getHealth() <= 0)
if (chargerShot==true) {
c.chargerDying();
onScreen.remove(i);
chargerKilled++;
i--;
} else {
c.act(); ///it should just act
// c.displayHealth(); // if gt time only do
// }
}
}
欢迎评价和批评。
最佳答案
代码存在几个问题,但现在,我将忽略有些“不干净”或“不优雅”的部分,并重点关注引起问题的主要问题:
所有 Charger
实例的状态都是相同的。字段
boolean chargerReachedTarget = false, chargerShot = false, chargerDive = true;
已被全局定义。只需将这一行(即这 3 个字段)移动到 Charger 类中,然后更改该行
if (chargerShot==true) {
至
if (c.chargerShot==true) {
这款游戏似乎已经更接近您可能一直在寻找的东西了。修改后,可以射击单个对手,老对手消失后新对手不断出现。
再说一遍:代码的结构并不是很好,并且有许多可能的小改进。例如,类似 if (c.chargerShot==true) { ... }
的内容最好是 if (charger.isShot()) { ... }
。但我不太熟悉处理及其最佳实践,所以我不确定“最佳”解决方案在全局意义上是什么样子......
关于java - 处理游戏: Gif images not respawning as intended,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25338279/
自从我学习 Espresso 以来已经 2 周了,我无法理解 intending 和 intended。什么时候使用 intending 和 intended?提供的示例和在线教程没有帮助,研究网络对
我一直在学习汇编,并且我了解到四个主要的 x86 通用寄存器(eax、ebx、ecx 和 edx)每个都有一个预期或建议的用途。例如,eax是累加器寄存器,ecx用作循环的计数器,等等。大多数编译器是
我正在尝试使用 LINQ 表达式将 DataTable 中的每一行转换为 List 对象中的条目。 我的代码: DataTable dataTable = dataSet.Tables[0]; var
这个问题的部分灵感来自 this one . alias foo='ls -1 $1' foo /etc 显示/etc 的内容,每行一项。 ls -1 /etc | tail 显示/etc 中的最后十
我已经开始尝试 APC 在每个网络服务器上存储一些特定的数据,作为对 memcached 的补充。 但是,下面的代码片段让我很头疼: echo apc_store('key', 'value'); e
This article声称每个寄存器都有一个预期的目的,更重要的是, When the engineers at Intel designed the original 8086 processor
我想要完成的是当我将鼠标悬停在一个链接上时,它将使其他链接成为 opacity: .1同时保持该链接颜色相同。 我尝试做的是 a:hover ~ a ,但它不起作用。我用基本的 创建了一个新的 js
这个问题对我来说真的很奇怪。我正在创建并写入一个简单的文件。当我阅读这段代码时: return_chars = new char[10]; file.read(return_chars, 10); 结
所以首先我点击运行模块 然后就出现了 我的代码 import time print("First we need to know you.") print("Enter your name p
我想通过名称获取路由值并将其存储在变量中。 原因是,我想使用 Redirect::intended($url) 方法将用户重定向到路由,而不是仅仅将 url 放在那里。 基本上,我希望具有与 Redi
我刚刚在读大卫的文章 HERE 并决定尝试使用 flexbox,因此我自己制作了以下示例: CSS .wrpr {
我总是对 CSS 中的 clear: left、clear: right 和 clear: both 感到困惑。我知道 clear: both 意味着它不允许在其自身的两侧有 float 元素。 我做
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我正在构建一个评论应用程序。我正在使用 json-server 进行发布请求。我的数据库看起来像这样 [{ "id": 5, "name": "Tom Cruise", "im
我是一名文凭学生,正在制作一个基于处理的游戏,这是一款塔防游戏,女主角将向冲向城堡的僵尸射箭。我对此有多个问题。 充电器僵尸被击杀后不会重生。 当我只射杀一只充电器僵尸时,所有充电器僵尸都一起死了。
我已经定义了一个 html 表,我需要 CSS 在 IE 9 和 IE 7 中工作(有或没有 hack)。我的 CSS 描述如下: .grid { border: 1px solid #C3C3C3;
所以,我有一个包裹在 div 中的图像 (.indexWrap):
我正在尝试对通过 Sequelize 创建的模型执行 beforeCreate 操作。我试图在创建用户之前保存密码和盐。但是,创建的用户没有加密的密码或盐。我对 Node.JS 不太熟悉,但我认为这与
在维基百科上,有关于如何根据随机方法初始化 kmeans 簇位置的描述。 在 pyclustering ,一个python集群库,各种集群都是用高性能c核实现的。这个核心比 numpy/sklearn
我们正在学习我的人工智能游戏类(class)中的转向行为,我想我会尝试实现其中的一些行为。我主要是在阅读 The Nature of Code熟悉主题。 Here是我的 Unity 项目的存储库。相关
我是一名优秀的程序员,十分优秀!