2012-03-10 3 views
1

Хорошо, поэтому я не могу понять, как сделать эту игру rpg im, работающую для андроида, столкновением. Я рисую карту на экране в выделенной части, в которой находится символ. Я перемещаю персонаж на 64 числа по экрану, и когда он попадает в рамки экрана, он затем перемещает карту и выглядит как символ перемещается по карте. Он останавливается, когда карта попадает в конец, она больше не перемещает экран. То, что я пытаюсь сделать, - это выяснить, находится ли мой персонаж в определенном растровом изображении и не пропускать его. Вот код для перемещения моего игрока и сама карта. Персонаж и плитки - это растровые изображения. Что-нибудь еще нужно, чтобы вы могли помочь мне лучше комментировать, и я опубликую больше и как это работает.Обнаружение столкновений с растровым изображением Android

Редактировать: sp.yp и sp.xp - это положение символа на экране.

Это Нарисуйте карту на экране:

public void draw(Canvas canvas){ 
      //How many tiles are on the screen length times width 
    for(int x = 0; x <= 31;x++){ 
     for(int y = 0; y <= 17;y++){ 

     switch(Map[Mapx + x][Mapy + y]){ 
     case 0: 
      canvas.drawBitmap(BLOCK_ROCK, x*32,y*32,null); 
     break; 
     case 1: 
      canvas.drawBitmap(BLOCK_OCEAN, x*32,y*32,null); 
     break; 
     case 2: 
      canvas.drawBitmap(BLOCK_GRASS, x*32,y*32,null); 
     break; 
     case 3: 
      canvas.drawBitmap(BLOCK_ROCK, x*32,y*32,null); 
     break; 
     case 4: 
      canvas.drawBitmap(BLOCK_FLOWER, x*32,y*32,null); 
     break; 
     } 
     } 
    } 
} 

Это Movment игрока, эти методы вызываются, когда человек попадает в клавиатуру я нарисовали на экран:

public void Down(){ 
    if(sp.yp == 512){ 
    if(w.Mapy == w.mapheight - 17 - 1){ 

    }else{ 
    w.Mapy +=1; 
    } 
    }else{ 
    sp.setYd(64); 
    sp.update(); 
    sp.setYd(0); 
    } 
} 
public void Left(){ 
    if(sp.xp == box.xMin + 32){ 
    sp.isRight = false; 
    if(w.Mapx == 0){ 

    }else{ 
     w.Mapx -=1; 
    } 
    }else{ 
    sp.isRight = false; 
    sp.setXd(-64); 
    sp.update(); 
    sp.xd = 0; 
    } 
} 
public void Jump(){ 
    if(sp.yp == 64){ 
    if(w.Mapy == 0){ 

    }else{ 
    w.Mapy -=1; 
    } 
    }else{ 
    sp.setYd(-64); 
    sp.update(); 
    sp.setYd(0); 
    } 
} 
public void Right(){ 
    if(sp.xp == 992){ 
    sp.isRight = true; 
    if(w.Mapx == w.mapwidth - 31 - 1){ 

    }else{ 
     w.Mapx +=1; 
    } 
    }else{ 
    sp.isRight = true; 
    sp.setXd(64); 
    sp.update(); 
    sp.xd = 0; 
    } 
} 
+1

Рассмотрим форматирование кода поэтому его легче читать. Вложенные для петель без отступов - беспорядок. – AHungerArtist

+0

количество плиток на экране, длина раз ширина – Xwire

+1

Что? Это даже не имеет смысла. Я сказал, что вы должны рассмотреть форматирование кода, потому что ваши вложенные для циклов не имеют отступов. Это не имеет никакого отношения к тому, что делает код, но как легко его читать. Разве вы не видите это во втором фрагменте кода? – AHungerArtist

ответ

1

Вы должны изучить механизм игры, чтобы справиться с этим типом вещей. Есть несколько, которые легко импортировать в ваш проект и обеспечивают большую функциональность, поэтому вы можете больше работать над разработкой игр и медиа-ресурсов. Поверьте мне, вы, вероятно, не хотите кодировать весь движок.

Проверить AndEngine - http://www.andengine.org/

Libgdx - http://code.google.com/p/libgdx/

Я предлагаю AndEngine, потому что есть большое приложение простых примеров, которые Вы можете использовать, чтобы экспериментировать с. Вы можете найти его на:

code.google.com/p/ andengineexamples/

(нет места в адресе ... жаль не может не создавать более двух ссылок)

+0

Спасибо четыре вашего абрисера, но я нашел способ сделать это, нарисовав прямоугольник на всех растровых изображениях, которые я только что проверил на столкновение на твердых! – Xwire

Смежные вопросы