Java 如何创建一个简单的游戏循环,不';我不需要画画
我仍然很难理解游戏循环以及代码在程序中的实际位置。为了学习基础知识,我想在此活动中添加一个非常简单的循环,但我不知道将代码放在何处。我想要的是,每隔10秒,怪物就会攻击玩家。每次玩家攻击怪物时,攻击按钮被禁用5秒,玩家才能再次攻击。我知道有很多关于游戏循环的文章,但是我还没有弄清楚如何用我想要的简单方式来实现我读到的内容。我不需要更新屏幕上的信息,背景是静态的,因为它是基于文本的。我还想继续战斗,直到玩家或怪物死亡 我不需要编写确切的代码,只需要关于设置计时器的框架以及在活动代码中放置计时器的位置 多谢各位Java 如何创建一个简单的游戏循环,不';我不需要画画,java,android,Java,Android,我仍然很难理解游戏循环以及代码在程序中的实际位置。为了学习基础知识,我想在此活动中添加一个非常简单的循环,但我不知道将代码放在何处。我想要的是,每隔10秒,怪物就会攻击玩家。每次玩家攻击怪物时,攻击按钮被禁用5秒,玩家才能再次攻击。我知道有很多关于游戏循环的文章,但是我还没有弄清楚如何用我想要的简单方式来实现我读到的内容。我不需要更新屏幕上的信息,背景是静态的,因为它是基于文本的。我还想继续战斗,直到玩家或怪物死亡 我不需要编写确切的代码,只需要关于设置计时器的框架以及在活动代码中放置计时器的位
public class MonstersActivity extends AppCompatActivity implements View.OnClickListener {
//variables for the UI
Button buttonAttack
View layout;
//Variables for game
private Player player;
private Monster monster;
//thread variables
private Handler myHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
//makes activity run in fullscreen
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_monsters);
//initiate player object from intent
Intent intent = getIntent();
Player player = (Player)intent.getSerializableExtra("player");
this.player = player;
//create monster
monster = new Monster(player.getCurrentCity());
//assign variables to UI objects
buttonAttack = (Button)findViewById(R.id.buttonAttack);
monsterHealth = (TextView)findViewById(R.id.textMonsterHealth);
playerHealth = (TextView)findViewById(R.id.textPlayerHealthMonster);
//setup onclick listeners
buttonAttack.setOnClickListener(this);
//initial UI setup
battleWindow.setEnabled(false);
battleWindow.setText("You have encountered a " + monster.getName() + ". Good luck brave Tobias!");
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.buttonAttack:
//Player attack
final int playerAttackDamage = GameElements.battleDamage(player.getPlayerStrength());
monster.setHealth(monster.getHealth() - playerAttackDamage);
player.setDamageDealt(playerAttackDamage);
battleWindow.setEnabled(true);
buttonAttack.setEnabled(false);
if(monster.getHealth() < 1){
player = GameElements.playerWon(player);
battleWindow.setText(player.getBattleLog());
player.setGP(player.getGP() + monster.getRewardGP());
monsterHealth.setText(monster.getName() + "'s Health = " + monster.getHealth());
}else {
player = GameElements.playerAttack(player);
battleWindow.setText(player.getBattleLog());
monsterHealth.setText(monster.getName() + "'s Health = " + monster.getHealth());
battleResult = 0;
}
break;
}
}
}//Activity Ends
公共类MonstersActivity扩展AppCompatActivity实现View.OnClickListener{
//UI的变量
纽扣钉
视图布局;
//游戏变量
私人玩家;
私人怪物;
//线程变量
私有处理程序myHandler=新处理程序();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//使活动全屏运行
requestWindowFeature(窗口。功能\u无\u标题);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,WindowManager.LayoutParams.FLAG_全屏);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_怪物);
//从意图中启动玩家对象
Intent=getIntent();
Player=(Player)intent.getSerializableExtra(“Player”);
this.player=player;
//创造怪物
怪物=新怪物(player.getCurrentCity());
//为UI对象分配变量
buttonAttack=(Button)findViewById(R.id.buttonAttack);
monsterHealth=(TextView)findViewById(R.id.textMonsterHealth);
playerHealth=(TextView)findViewById(R.id.textPlayerHealthMonster);
//设置onclick侦听器
ButtonAtack.setOnClickListener(此);
//初始用户界面设置
battleWindow.setEnabled(false);
battleWindow.setText(“您遇到了一个“+怪物。getName()+”。祝您好运,勇敢的托拜厄斯!”);
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.buttonAttack:
//球员进攻
最终智力玩家攻击伤害=游戏元素。战斗伤害(player.getPlayerStrength());
monster.setHealth(monster.getHealth()-playerAttackDamage);
玩家设置伤害(玩家设置伤害);
battleWindow.setEnabled(true);
buttonAttack.setEnabled(假);
if(monster.getHealth()<1){
player=GameElements.playerWon(玩家);
battleWindow.setText(player.getBattleLog());
player.setGP(player.getGP()+monster.getRewardGP());
monsterHealth.setText(monster.getName()+“'s Health=“+monster.getHealth());
}否则{
player=GameElements.playerAttack(玩家);
battleWindow.setText(player.getBattleLog());
monsterHealth.setText(monster.getName()+“'s Health=“+monster.getHealth());
结果=0;
}
打破
}
}
}//活动结束
基本上,游戏循环是相当简单的事情:一段时间的线程
run(){
while(running){
updateGameState();
}
}
从这一点上,你应该能够节省自上次怪物攻击以来的时间,并在10秒后再次触发
你必须像onPause()/onResume()那样进行活动循环。它可以简单地通过运行布尔函数来实现。此外,您还可以使用Thread.sleep(timeBetweenGameUpdate)来避免溢出。我可以使用几种方法来实现这一点
为你的怪物和玩家制作一个实例,这样你就可以设置不同的冷却时间。您可以在倒计时的
onFinish()
方法中执行操作(禁用按钮、重新启动计时器、计算新hp等)。您研究过多线程吗?