我如何让我的代码更短
how do i make my code shorter
嗨,我做了一个小形状的游戏,我的 if 语句开始失控,所以我做了一个更简单的测试场景游戏来尝试简化代码,但我对 java 和android 正如我喜欢的那样,所以在尝试了一些事情之后我想我会问这个问题,我如何让这个代码更小?
目前我正在将 onTouchListeners 和 onDragListeners 用于一些形状,atm 3 种彩色形状和 3 种空白 'empty shapes' 并且当它们通过将一个放在另一个之上而连接时,空形状变成彩色......非常简单。但是需要大量的代码,这就是我所拥有的
@Override
public boolean onTouch(View v, MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_DOWN) {
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(null, shadowBuilder, v, 0);
sp.play(dragSound, 1, 1, 0, 0, 1);
return true;
} else {
return false;
}
}
//WHEN DRAGGED AND DROPPED
@Override
public boolean onDrag(View v, DragEvent e) {
if (e.getAction()==DragEvent.ACTION_DROP) {
View view = (View) e.getLocalState();
//IF THEY MATCH
if(view.getId()==R.id.squareImage && v.getId()==R.id.squareImage1)
{
ViewGroup from = (ViewGroup) view.getParent();
ViewGroup to = (ViewGroup) findViewById(R.id.layout2);
View congrats = findViewById(R.id.top_layout);
ViewGroup two = (ViewGroup) findViewById(R.id.layout3);
from.removeView(view);
v.setBackgroundResource(R.drawable.dragsquare);
sp.play(dropSound, 1, 1, 0, 0, 1);
sb.setVisibility(View.VISIBLE);
imageView = (ImageView)findViewById(R.id.imageView);
imageView.setVisibility(View.VISIBLE);
if (to.getChildCount()< 1 && two.getChildCount()< 1)
{
congrats.setVisibility(View.VISIBLE);
imageView.setBackgroundResource(R.drawable.congrats);
sun=(AnimationDrawable)imageView.getBackground();
sun.start();
sp.play(tada, 1, 1, 0, 0, 1);
congrats.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View congrats
(RelativeLayout)findViewById(R.id.top_layout);
congrats.setVisibility(View.INVISIBLE);
}
});
}
//2 square balloons floating
sb = (ImageView)findViewById(R.id.squareballoon);
sb.setVisibility(View.VISIBLE);
sb2 = (ImageView)findViewById(R.id.squareballoon2);
sb2.setVisibility(View.VISIBLE);
sp.play(inflate, 1, 1, 0, 0, 1);
ObjectAnimator sqbalAnim3=
ObjectAnimator.ofFloat(sb2,"x",-500,500);
sqbalAnim3.setDuration(700);
sqbalAnim3.setRepeatCount(20);
sqbalAnim3.setRepeatMode(ValueAnimator.REVERSE);
ObjectAnimator sqbalAnim =
ObjectAnimator.ofFloat(sb2,"y",1800,-1800);
sqbalAnim.setDuration(3000);
sqbalAnim.setRepeatMode(ValueAnimator.RESTART);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
sb2.setVisibility(View.GONE);
}
});
animSetXY.playTogether(sqbalAnim, sqbalAnim3);
animSetXY.setStartDelay(20);
animSetXY.start();
ObjectAnimator sqbal2Anim =
ObjectAnimator.ofFloat(findViewById(R.id.squareballoon2),"y",-450);
sqbal2Anim.setDuration(3000);
sqbal2Anim.setRepeatMode(ValueAnimator.RESTART);
ObjectAnimator sqbalAnim4 =
ObjectAnimator.ofFloat(findViewById(R.id.squareballoon2),"x",650,750);
sqbalAnim4.setStartDelay(20);
sqbalAnim4.setDuration(300);
sqbalAnim4.setRepeatCount(6);
sqbalAnim4.setRepeatMode(ValueAnimator.REVERSE);
AnimatorSet animSetXY2 = new AnimatorSet();
animSetXY2.playTogether(sqbal2Anim,sqbalAnim4);
animSetXY2.start();
return true;}
//end of square balloons
else if(view.getId()==R.id.circleImage &&
v.getId()==R.id.circleImage1){
ViewGroup from = (ViewGroup) view.getParent();
ViewGroup to = (ViewGroup) findViewById(R.id.layout2);
View congrats = findViewById(R.id.top_layout);
from.removeView(view);
v.setBackgroundResource(R.drawable.dragcircle);
sp.play(dropSound, 1, 1, 0, 0, 1);
cb = (ImageView)findViewById(R.id.circleballoon);
cb.setVisibility(View.VISIBLE);
imageView.setVisibility(View.VISIBLE);
ViewGroup two = (ViewGroup) findViewById(R.id.layout3);
if (to.getChildCount()< 1 && two.getChildCount()< 1)
{
congrats.setVisibility(View.VISIBLE);
imageView.setBackgroundResource(R.drawable.congrats);
sun=(AnimationDrawable)imageView.getBackground();
sun.start();
sp.play(tada, 1, 1, 0, 0, 1);
congrats.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View congrats
(RelativeLayout)findViewById(R.id.top_layout);
congrats.setVisibility(View.INVISIBLE);
}
});
}
//circle balloons floating
cb = (ImageView)findViewById(R.id.circleballoon);
cb.setVisibility(View.VISIBLE);
cb2 = (ImageView)findViewById(R.id.circleballoon2);
cb2.setVisibility(View.VISIBLE);
sp.play(inflate, 1, 1, 0, 0, 1);
ObjectAnimator sqbalAnim3 =
ObjectAnimator.ofFloat(cb,"x",-500,500);
sqbalAnim3.setDuration(700);
sqbalAnim3.setRepeatCount(20);
sqbalAnim3.setRepeatMode(ValueAnimator.REVERSE);
ObjectAnimator sqbalAnim =
ObjectAnimator.ofFloat(cb,"y",1800,-1800);
sqbalAnim.setDuration(3000);
sqbalAnim.setRepeatMode(ValueAnimator.RESTART);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
cb.setVisibility(View.GONE);
}
});
animSetXY.playTogether(sqbalAnim, sqbalAnim3);
animSetXY.setStartDelay(20);
animSetXY.start();
ObjectAnimator sqbal2Anim =
ObjectAnimator.ofFloat(findViewById(R.id.squareballoon2),"y",-450);
sqbal2Anim.setDuration(3000);
sqbal2Anim.setRepeatMode(ValueAnimator.RESTART);
ObjectAnimator sqbalAnim4 =
ObjectAnimator.ofFloat(findViewById(R.id.squareballoon2),"x",650,750);
sqbalAnim4.setStartDelay(20);
sqbalAnim4.setDuration(300);
sqbalAnim4.setRepeatCount(6);
sqbalAnim4.setRepeatMode(ValueAnimator.REVERSE);
AnimatorSet animSetXY2 = new AnimatorSet();
animSetXY2.playTogether(sqbal2Anim,sqbalAnim4);
animSetXY2.start();
return true;}
} else if(view.getId()==R.id.triangleImage &&
v.getId()==R.id.triangleImage1){
ViewGroup from = (ViewGroup) view.getParent();
ViewGroup to = (ViewGroup) findViewById(R.id.layout2);
View congrats = findViewById(R.id.top_layout);
from.removeView(view);
v.setBackgroundResource(R.drawable.dragtriangle);
sp.play(dropSound, 1, 1, 0, 0, 1);
tb = (ImageView)findViewById(R.id.triballoon);
tb.setVisibility(View.VISIBLE);
imageView.setVisibility(View.VISIBLE);
ViewGroup two = (ViewGroup) findViewById(R.id.layout3);
if (to.getChildCount()< 1 && two.getChildCount()< 1)
{
congrats.setVisibility(View.VISIBLE);
imageView.setBackgroundResource(R.drawable.congrats);
sun=(AnimationDrawable)imageView.getBackground();
sun.start();
sp.play(tada, 1, 1, 0, 0, 1);
congrats.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View congrats = findViewById(R.id.top_layout);
congrats.setVisibility(View.INVISIBLE);
}
});
}
AnimatorSet sunSet = (AnimatorSet)
AnimatorInflater.loadAnimator(this, R.animator.float1);
sunSet.setTarget(tb);
sunSet.start();
tb = (ImageView)findViewById(R.id.triballoon);
AnimatorSet sunnySet = (AnimatorSet)
AnimatorInflater.loadAnimator(this, R.animator.float2);
sunnySet.setTarget(tb);
sunnySet.start();
ImageView tb2 = (ImageView)findViewById(R.id.triballoon2);
tb2.setVisibility(View.VISIBLE);
AnimatorSet sunSet1 = (AnimatorSet)
AnimatorInflater.loadAnimator(this, R.animator.float3);
sunSet1.setTarget(tb2);
sunSet1.start();
tb2 = (ImageView)findViewById(R.id.triballoon2);
tb2.setVisibility(View.VISIBLE);
AnimatorSet sunnySet1 = (AnimatorSet)
AnimatorInflater.loadAnimator(this, R.animator.float2);
sunnySet1.setTarget(tb);
sunnySet1.start();
sp.play(inflate, 1, 1, 0, 0, 1);
return true;
这是我的原创,我想知道的是,有没有一种方法可以使用 OR 运算符将它们全部放在同一个语句中,但仍然为每个形状给出不同的结果,就像这样
@Override
public boolean onDrag(View v, DragEvent e) {
if (e.getAction() == DragEvent.ACTION_DROP) {
View view = (View) e.getLocalState();
//IF THEY MATCH
if (view.getId() == R.id.squareshape && v.getId() ==
R.id.emptysquare || view.getId() == R.id.circleshape && v.getId() ==
R.id.emptycircle|| view.getId() == R.id.trishape && v.getId() ==
R.id.emptytri ) {
//view.getId().(v.getId()); view.setBackgroundResource(v)
mt_sq.setImageResource(R.drawable.dragsquare);
}else{
//do nothing
}
}
return true;
}
中间的注释是我要实现的 //view.getId().(v.getId()); view.setBackgroundResource(v) 但很明显,这给了我错误,任何人都可以提供解决方案,还是我只需要继续运送我的原件?欢迎提出任何建议
在另一个 SE 站点上提出了类似的问题,其核心与您的问题非常相似——一般来说,避免在游戏 programming/software 开发中膨胀。可以找到我的答案 here,但您应该阅读下面修改后的答案,因为它的格式是为了以一般方式解决您的问题。
为什么 if
陈述是邪恶的:
Groo posted a fantastic answer to this question in a Whosebug thread several years ago, which you can find here,这归结为可读性和未来证明是 if 语句的敌人。
但这并不是说您应该始终避免使用 if 语句!它们各有用途,简单来说就是一次性支票。
编写干净的游戏代码:
假设我们有一个语句,它在我们的渲染函数中绘制了一个精灵:
if (powerUpActive){
draw(shieldSprite);
}
经过几周的开发,渲染函数变得臃肿且难以遍历。要解决这个问题,我们应该将上述逻辑(以及所有类似的逻辑)移动到一个函数中,在 class PowerUp 中,像这样:
class PowerUps {
public void Check() {
if (powerUpActive){
draw(shieldSprite);
}
}
}
然后打电话
powerUp.Check;
来自渲染。
为了将来证明这一点,我什至还会将 powerUpActive 更改为更具体的东西,例如 class 护盾,在 class PowerUp 内,然后用 [=64 检查它的 activity =]() 像这样:
class PowerUps {
class Shield {
private boolean active = false;
public void enable() {
active = true;
}
public void disable() {
active = false;
}
}
public void Check() {
if (shield.active){
draw(shieldSprite);
}
}
}
这样做的目的有两个——您可以通过调用 powerUp.shield.enable() 和 绘制它而不必太担心回溯。
对于一个盾牌加电来说,这似乎需要做很多工作,但这是一个让您的代码面向未来并节省时间的问题,经过数小时的努力之后,您最终会想要扩展.
想一想你的渲染函数看起来会有多漂亮!如果您不担心损坏了某些东西,那么扩展您的游戏将是多么容易!我不知道你怎么想,但我已经很兴奋了! :3
注意: 我举的例子只是为了说明一点。在现实世界中,您可能希望更积极地使用继承并更加组织事物,例如在 Shield class.
中保留对 shieldSprite 的引用
嗨,我做了一个小形状的游戏,我的 if 语句开始失控,所以我做了一个更简单的测试场景游戏来尝试简化代码,但我对 java 和android 正如我喜欢的那样,所以在尝试了一些事情之后我想我会问这个问题,我如何让这个代码更小? 目前我正在将 onTouchListeners 和 onDragListeners 用于一些形状,atm 3 种彩色形状和 3 种空白 'empty shapes' 并且当它们通过将一个放在另一个之上而连接时,空形状变成彩色......非常简单。但是需要大量的代码,这就是我所拥有的
@Override
public boolean onTouch(View v, MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_DOWN) {
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(null, shadowBuilder, v, 0);
sp.play(dragSound, 1, 1, 0, 0, 1);
return true;
} else {
return false;
}
}
//WHEN DRAGGED AND DROPPED
@Override
public boolean onDrag(View v, DragEvent e) {
if (e.getAction()==DragEvent.ACTION_DROP) {
View view = (View) e.getLocalState();
//IF THEY MATCH
if(view.getId()==R.id.squareImage && v.getId()==R.id.squareImage1)
{
ViewGroup from = (ViewGroup) view.getParent();
ViewGroup to = (ViewGroup) findViewById(R.id.layout2);
View congrats = findViewById(R.id.top_layout);
ViewGroup two = (ViewGroup) findViewById(R.id.layout3);
from.removeView(view);
v.setBackgroundResource(R.drawable.dragsquare);
sp.play(dropSound, 1, 1, 0, 0, 1);
sb.setVisibility(View.VISIBLE);
imageView = (ImageView)findViewById(R.id.imageView);
imageView.setVisibility(View.VISIBLE);
if (to.getChildCount()< 1 && two.getChildCount()< 1)
{
congrats.setVisibility(View.VISIBLE);
imageView.setBackgroundResource(R.drawable.congrats);
sun=(AnimationDrawable)imageView.getBackground();
sun.start();
sp.play(tada, 1, 1, 0, 0, 1);
congrats.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View congrats
(RelativeLayout)findViewById(R.id.top_layout);
congrats.setVisibility(View.INVISIBLE);
}
});
}
//2 square balloons floating
sb = (ImageView)findViewById(R.id.squareballoon);
sb.setVisibility(View.VISIBLE);
sb2 = (ImageView)findViewById(R.id.squareballoon2);
sb2.setVisibility(View.VISIBLE);
sp.play(inflate, 1, 1, 0, 0, 1);
ObjectAnimator sqbalAnim3=
ObjectAnimator.ofFloat(sb2,"x",-500,500);
sqbalAnim3.setDuration(700);
sqbalAnim3.setRepeatCount(20);
sqbalAnim3.setRepeatMode(ValueAnimator.REVERSE);
ObjectAnimator sqbalAnim =
ObjectAnimator.ofFloat(sb2,"y",1800,-1800);
sqbalAnim.setDuration(3000);
sqbalAnim.setRepeatMode(ValueAnimator.RESTART);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
sb2.setVisibility(View.GONE);
}
});
animSetXY.playTogether(sqbalAnim, sqbalAnim3);
animSetXY.setStartDelay(20);
animSetXY.start();
ObjectAnimator sqbal2Anim =
ObjectAnimator.ofFloat(findViewById(R.id.squareballoon2),"y",-450);
sqbal2Anim.setDuration(3000);
sqbal2Anim.setRepeatMode(ValueAnimator.RESTART);
ObjectAnimator sqbalAnim4 =
ObjectAnimator.ofFloat(findViewById(R.id.squareballoon2),"x",650,750);
sqbalAnim4.setStartDelay(20);
sqbalAnim4.setDuration(300);
sqbalAnim4.setRepeatCount(6);
sqbalAnim4.setRepeatMode(ValueAnimator.REVERSE);
AnimatorSet animSetXY2 = new AnimatorSet();
animSetXY2.playTogether(sqbal2Anim,sqbalAnim4);
animSetXY2.start();
return true;}
//end of square balloons
else if(view.getId()==R.id.circleImage &&
v.getId()==R.id.circleImage1){
ViewGroup from = (ViewGroup) view.getParent();
ViewGroup to = (ViewGroup) findViewById(R.id.layout2);
View congrats = findViewById(R.id.top_layout);
from.removeView(view);
v.setBackgroundResource(R.drawable.dragcircle);
sp.play(dropSound, 1, 1, 0, 0, 1);
cb = (ImageView)findViewById(R.id.circleballoon);
cb.setVisibility(View.VISIBLE);
imageView.setVisibility(View.VISIBLE);
ViewGroup two = (ViewGroup) findViewById(R.id.layout3);
if (to.getChildCount()< 1 && two.getChildCount()< 1)
{
congrats.setVisibility(View.VISIBLE);
imageView.setBackgroundResource(R.drawable.congrats);
sun=(AnimationDrawable)imageView.getBackground();
sun.start();
sp.play(tada, 1, 1, 0, 0, 1);
congrats.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View congrats
(RelativeLayout)findViewById(R.id.top_layout);
congrats.setVisibility(View.INVISIBLE);
}
});
}
//circle balloons floating
cb = (ImageView)findViewById(R.id.circleballoon);
cb.setVisibility(View.VISIBLE);
cb2 = (ImageView)findViewById(R.id.circleballoon2);
cb2.setVisibility(View.VISIBLE);
sp.play(inflate, 1, 1, 0, 0, 1);
ObjectAnimator sqbalAnim3 =
ObjectAnimator.ofFloat(cb,"x",-500,500);
sqbalAnim3.setDuration(700);
sqbalAnim3.setRepeatCount(20);
sqbalAnim3.setRepeatMode(ValueAnimator.REVERSE);
ObjectAnimator sqbalAnim =
ObjectAnimator.ofFloat(cb,"y",1800,-1800);
sqbalAnim.setDuration(3000);
sqbalAnim.setRepeatMode(ValueAnimator.RESTART);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
cb.setVisibility(View.GONE);
}
});
animSetXY.playTogether(sqbalAnim, sqbalAnim3);
animSetXY.setStartDelay(20);
animSetXY.start();
ObjectAnimator sqbal2Anim =
ObjectAnimator.ofFloat(findViewById(R.id.squareballoon2),"y",-450);
sqbal2Anim.setDuration(3000);
sqbal2Anim.setRepeatMode(ValueAnimator.RESTART);
ObjectAnimator sqbalAnim4 =
ObjectAnimator.ofFloat(findViewById(R.id.squareballoon2),"x",650,750);
sqbalAnim4.setStartDelay(20);
sqbalAnim4.setDuration(300);
sqbalAnim4.setRepeatCount(6);
sqbalAnim4.setRepeatMode(ValueAnimator.REVERSE);
AnimatorSet animSetXY2 = new AnimatorSet();
animSetXY2.playTogether(sqbal2Anim,sqbalAnim4);
animSetXY2.start();
return true;}
} else if(view.getId()==R.id.triangleImage &&
v.getId()==R.id.triangleImage1){
ViewGroup from = (ViewGroup) view.getParent();
ViewGroup to = (ViewGroup) findViewById(R.id.layout2);
View congrats = findViewById(R.id.top_layout);
from.removeView(view);
v.setBackgroundResource(R.drawable.dragtriangle);
sp.play(dropSound, 1, 1, 0, 0, 1);
tb = (ImageView)findViewById(R.id.triballoon);
tb.setVisibility(View.VISIBLE);
imageView.setVisibility(View.VISIBLE);
ViewGroup two = (ViewGroup) findViewById(R.id.layout3);
if (to.getChildCount()< 1 && two.getChildCount()< 1)
{
congrats.setVisibility(View.VISIBLE);
imageView.setBackgroundResource(R.drawable.congrats);
sun=(AnimationDrawable)imageView.getBackground();
sun.start();
sp.play(tada, 1, 1, 0, 0, 1);
congrats.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View congrats = findViewById(R.id.top_layout);
congrats.setVisibility(View.INVISIBLE);
}
});
}
AnimatorSet sunSet = (AnimatorSet)
AnimatorInflater.loadAnimator(this, R.animator.float1);
sunSet.setTarget(tb);
sunSet.start();
tb = (ImageView)findViewById(R.id.triballoon);
AnimatorSet sunnySet = (AnimatorSet)
AnimatorInflater.loadAnimator(this, R.animator.float2);
sunnySet.setTarget(tb);
sunnySet.start();
ImageView tb2 = (ImageView)findViewById(R.id.triballoon2);
tb2.setVisibility(View.VISIBLE);
AnimatorSet sunSet1 = (AnimatorSet)
AnimatorInflater.loadAnimator(this, R.animator.float3);
sunSet1.setTarget(tb2);
sunSet1.start();
tb2 = (ImageView)findViewById(R.id.triballoon2);
tb2.setVisibility(View.VISIBLE);
AnimatorSet sunnySet1 = (AnimatorSet)
AnimatorInflater.loadAnimator(this, R.animator.float2);
sunnySet1.setTarget(tb);
sunnySet1.start();
sp.play(inflate, 1, 1, 0, 0, 1);
return true;
这是我的原创,我想知道的是,有没有一种方法可以使用 OR 运算符将它们全部放在同一个语句中,但仍然为每个形状给出不同的结果,就像这样
@Override
public boolean onDrag(View v, DragEvent e) {
if (e.getAction() == DragEvent.ACTION_DROP) {
View view = (View) e.getLocalState();
//IF THEY MATCH
if (view.getId() == R.id.squareshape && v.getId() ==
R.id.emptysquare || view.getId() == R.id.circleshape && v.getId() ==
R.id.emptycircle|| view.getId() == R.id.trishape && v.getId() ==
R.id.emptytri ) {
//view.getId().(v.getId()); view.setBackgroundResource(v)
mt_sq.setImageResource(R.drawable.dragsquare);
}else{
//do nothing
}
}
return true;
}
中间的注释是我要实现的 //view.getId().(v.getId()); view.setBackgroundResource(v) 但很明显,这给了我错误,任何人都可以提供解决方案,还是我只需要继续运送我的原件?欢迎提出任何建议
在另一个 SE 站点上提出了类似的问题,其核心与您的问题非常相似——一般来说,避免在游戏 programming/software 开发中膨胀。可以找到我的答案 here,但您应该阅读下面修改后的答案,因为它的格式是为了以一般方式解决您的问题。
为什么 if
陈述是邪恶的:
Groo posted a fantastic answer to this question in a Whosebug thread several years ago, which you can find here,这归结为可读性和未来证明是 if 语句的敌人。
但这并不是说您应该始终避免使用 if 语句!它们各有用途,简单来说就是一次性支票。
编写干净的游戏代码:
假设我们有一个语句,它在我们的渲染函数中绘制了一个精灵:
if (powerUpActive){
draw(shieldSprite);
}
经过几周的开发,渲染函数变得臃肿且难以遍历。要解决这个问题,我们应该将上述逻辑(以及所有类似的逻辑)移动到一个函数中,在 class PowerUp 中,像这样:
class PowerUps {
public void Check() {
if (powerUpActive){
draw(shieldSprite);
}
}
}
然后打电话
powerUp.Check;
来自渲染。
为了将来证明这一点,我什至还会将 powerUpActive 更改为更具体的东西,例如 class 护盾,在 class PowerUp 内,然后用 [=64 检查它的 activity =]() 像这样:
class PowerUps {
class Shield {
private boolean active = false;
public void enable() {
active = true;
}
public void disable() {
active = false;
}
}
public void Check() {
if (shield.active){
draw(shieldSprite);
}
}
}
这样做的目的有两个——您可以通过调用 powerUp.shield.enable() 和 绘制它而不必太担心回溯。
对于一个盾牌加电来说,这似乎需要做很多工作,但这是一个让您的代码面向未来并节省时间的问题,经过数小时的努力之后,您最终会想要扩展.
想一想你的渲染函数看起来会有多漂亮!如果您不担心损坏了某些东西,那么扩展您的游戏将是多么容易!我不知道你怎么想,但我已经很兴奋了! :3
注意: 我举的例子只是为了说明一点。在现实世界中,您可能希望更积极地使用继承并更加组织事物,例如在 Shield class.
中保留对 shieldSprite 的引用