我正在制作一款游戏,您可以在其中点击一张卡片将其随机更改为另一张卡片。一张卡的图像文件是370x512 png,大小或多或少200 kb。我的问题是imageView将其图片从一张卡片更改为另一张卡片的过程非常缓慢,持续时间近两秒钟。另一个问题是如果你在卡片上点击太快,那么课程会崩溃。我已经尝试过使用ImageButton,带有一个按钮和一个ImageView,我尝试了11个ImageViews(游戏中有11个不同的卡),他们总是在那里,但只有一个是可见的。我没有任何线索为什么换卡过程需要这么多时间。这是我更改卡的代码。此代码带有一个按钮和一个ImageView:
public class MainActivity extends Activity {
public static String dampfhammerData = "dampfhammerData";
SharedPreferences DampfhammerData;
public int nextCard;
public int lastCard = 0;
public int all=3;
public int buddy=3;
public int dampfhammer=3;
public int frauen=3;
public int links=3;
public int rechts=3;
public int maenner=3;
public int questionmaster=3;
public int regel=3;
public int themenrunde=3;
public int zaehlen=3;
public int deck = 44;
public String version;
ImageView Karte;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void changeCard(View view) {
selectCard();
}
public void selectCard(){
lastCard = nextCard;
if(deck > 0) {
Random rand = new Random();
nextCard = (rand.nextInt(10));
if(nextCard != lastCard) {
checkCardDeck();
}else {
selectCard();
}
}else {
Intent intent = new Intent(this, End.class);
startActivity(intent);
}
}
public void checkCardDeck(){
Karte = (ImageView) findViewById(R.id.karte);
switch (nextCard) {
case 0:
if(all > 0){
all--;
deck--;
Karte.setBackgroundResource(R.drawable.all);
}else {
selectCard();
}
break;
case 1:
if(zaehlen > 0){
zaehlen--;
deck--;
Karte.setBackgroundResource(R.drawable.zaehlen);
}else {
selectCard();
}
break;
case 2:
if(buddy > 0){
buddy--;
deck--;
Karte.setBackgroundResource(R.drawable.buddie);
}else {
selectCard();
}
break;
case 3:
if(themenrunde > 0){
themenrunde--;
deck--;
Karte.setBackgroundResource(R.drawable.themenrunde);
}else {
selectCard();
}
break;
case 4:
if(dampfhammer > 0){
dampfhammer--;
deck--;
Karte.setBackgroundResource(R.drawable.dampfhammer);
}else {
selectCard();
}
break;
case 5:
if(links > 0){
links--;
deck--;
Karte.setBackgroundResource(R.drawable.links);
}else {
selectCard();
}
break;
case 6:
if(rechts > 0){
rechts--;
deck--;
Karte.setBackgroundResource(R.drawable.rechts);
}else {
selectCard();
}
break;
case 7:
if(frauen > 0){
frauen--;
deck--;
Karte.setBackgroundResource(R.drawable.frauen);
}else {
selectCard();
}
break;
case 8:
if(maenner > 0){
maenner--;
deck--;
Karte.setBackgroundResource(R.drawable.maenner);
}else {
selectCard();
}
break;
case 9:
if(questionmaster > 0){
questionmaster--;
deck--;
Karte.setBackgroundResource(R.drawable.questionmaster);
}else {
selectCard();
}
break;
case 10:
if(regel > 0){
regel--;
deck--;
Karte.setBackgroundResource(R.drawable.regel);
}else {
selectCard();
}
break;
}
}
@Override
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Wollen sie das Spiel verlassen?") //
.setMessage("Das aktuelle Spiel wird abgebrochen und sie kehren zum Startbildschirm zurück, wollen sie das wirklich?") //
.setPositiveButton(("Ja"), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
})
.setNegativeButton(("Nein"), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
builder.show();
}
}
感谢您的帮助!
答案 0 :(得分:0)
如果你的牌组由11张牌组成,每张牌出现四次(我认为这是基于查看代码的权利),你可以创建一个随机的随机播放:
ArrayList<Integer> deckList = new ArrayList<Integer>();
for (int i=0; i<11; i++) {
deckList.add(i); deckList.add(i); deckList.add(i); deckList.add(i);
}
Collections.shuffle(deckList);
通过选择一个随机的下一张卡并在重复时重试,你正在使用一个非常低效且不可预测的过程,特别是因为重试是递归的,增加了调用堆栈的大小。
您当然必须进行其他更改才能在代码中使用我的套牌,但它应该更快一些。