Duhjoker
Well-known member
ok guys I'm having a problem that ive been trying to fix for days. I wrote a menu function for a game I'm working on, that when called brings up a short menu graphic with button controls to move a cursor up and down the menu. But when I open up the menu the new controls don't move the cursor but moves the player instead. Because both menu and player functions use the same up and down buttins. Ive tried else if statements, ive tried moving the set of controls in the function, ive looked up a lot keywords like break and switch but cannot find the answer I need.
Can someone please help me solve this. I'm learning but I have no idea how to fix it.
here is the menu function. I need help with calling the menu as well. it works by giving menu the define of "int menu_1 = 1, then pressing the A button changes the integer by adding up. But this makes the menu calling erratic making me have to push the button several times to get the menu to come back up after the first time. I could remove the addition parts so it comes open just by pressing A but then it kills it when a is released and I cant figure that out either.
now here is the function that controls the player movement...
so as you can see I need to make up several button control systems that I can separate so only the called function uses a certain set of buttons
Can someone please help me solve this. I'm learning but I have no idea how to fix it.
here is the menu function. I need help with calling the menu as well. it works by giving menu the define of "int menu_1 = 1, then pressing the A button changes the integer by adding up. But this makes the menu calling erratic making me have to push the button several times to get the menu to come back up after the first time. I could remove the addition parts so it comes open just by pressing A but then it kills it when a is released and I cant figure that out either.
Code:
void Menu(){
if (ButtonA.fallingEdge()){
menu_1 = menu_1 + 1;}
else if(menu_1 == 3){
tft.writeRectNBPP(16,0,114,32,4,itemmenutop,palette);
tft.writeRectNBPP(16,32,114,16,4,itemmenu2,palette);
tft.writeRectNBPP(16,48,114,160,4,itemmenu3,palette);
tft.writeRectNBPP(16,208,114,16,4,itemmenu4,palette);
}
else if(menu_1 >= 5){
menu_1 = 1;}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (ButtonUp.fallingEdge()){
tft.writeRectNBPP(cursor_x,cursor_y,16,16,4,cursordot2,palette);
cursor_y -= 16;
// if(checkcolision())
{
cursor_y += 16;}
}
if(cursor_y <= 32){
cursor_y = 32;}
//////////////////////////////////////////////////////////////////////////////
///////////////////////////////Down///////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
if (ButtonDown.fallingEdge()){
tft.writeRectNBPP(cursor_x, cursor_y,16,16,4,cursordot2,palette);
cursor_y += 16;
// if(checkcolision())
{
cursor_y -= 16;}
}
if(cursor_y >= 224){
cursor_y = 224;}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
now here is the function that controls the player movement...
Code:
void drawplayer() {
///////////////////////////////////////////////////////////////////////////////
////////////////////////////////camera controls////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// Clamp cameraX
if(cameraX < cameraXMin)
{
cameraX = cameraXMin;
}
else if(cameraX > cameraXMax)
{
cameraX = cameraXMax;
}
// Clamp cameraY
if(cameraY < cameraYMin)
{
cameraY = cameraYMin;
}
else if(cameraY > cameraYMax)
{
cameraY = cameraYMax;
}
// Check if player is beyond X boundary
if(player_x < playerXMin)
{
cameraX += cameraXSpeed;
if(cameraX > cameraXMin && cameraX < cameraXMax)
{
player_x = playerXMin;
}
}
else if(player_x > playerXMax)
{
cameraX -= cameraXSpeed;
if(cameraX > cameraXMin && cameraX < cameraXMax)
{
player_x = playerXMax;
}
}
// Check if player is beyond Y boundary
if(player_y < playerYMin)
{
cameraY += cameraYSpeed;
if(cameraY > cameraYMin && cameraY < cameraYMax)
{
player_y = playerYMin;
}
}
else if(player_y > playerYMax)
{
cameraY -= cameraYSpeed;
if(cameraY > cameraYMin && cameraY < cameraYMax)
{
player_y = playerYMax;
}
}
//////////////////////////////////////////////////////////////////////////////
///////////////////////////////Palette////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
palette[0] = 0;
palette[1] = BLACK;
palette[2] = BLUE;
palette[3] = BROWN;
palette[4] = DARKGREEN;
palette[5] = GREY;
palette[6] = PINK;
palette[7] = RED;
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
palette[8] = BEIGE;
palette[9] = GREEN;
palette[a]= DARKGREY;
palette[b] = LIGHTGREY;
palette[c] = YELLOW;
palette[d] = PURPLE;
palette[e] = WHITE;
palette[f] = ORANGE;
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////Tilemap/////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/////// top center rock formation
if(room == 1){
tft.drawTilemap(cameraX, cameraY, imperialbasin, spritesheet, palette);}
else if(room == 2){
tft.drawTilemap(cameraX, cameraY, dungeon1, spritesheet, palette);}
else if(room == 3){
tft.drawTilemap(cameraX, cameraY, arakeen, spritesheet, palette);}
else if(room == 4){
tft.drawTilemap(cameraX, cameraY, arakeen1l1, spritesheet, palette);}
else if(room == 5){
tft.drawTilemap(cameraX, cameraY, arakeen1l2, spritesheet, palette);}
else if(room == 6){
tft.drawTilemap(cameraX, cameraY, arakeen2l1, spritesheet, palette);}
else if(room == 7){
tft.drawTilemap(cameraX, cameraY, arakeen2l2, spritesheet, palette);}
else if(room == 8){
tft.drawTilemap(cameraX, cameraY, arakeen2l3, spritesheet, palette);}
else if(room == 9){
tft.drawTilemap(cameraX, cameraY, arakeen3, spritesheet, palette);}
else if(room == 10){
tft.drawTilemap(cameraX, cameraY, arakeen4l1, spritesheet, palette);}
else if(room == 11){
tft.drawTilemap(cameraX, cameraY, arakeen4l2, spritesheet, palette);}
else if(room == 12){
tft.drawTilemap(cameraX, cameraY, arakeen4l3, spritesheet, palette);}
else if(room == 13){
tft.drawTilemap(cameraX, cameraY, arakeen5l1, spritesheet, palette);}
else if(room == 14){
tft.drawTilemap(cameraX, cameraY, arakeen5b1, spritesheet, palette);}
else if(room == 15){
tft.drawTilemap(cameraX, cameraY, arakeen5b2, spritesheet, palette);}
else if(room == 16){
tft.drawTilemap(cameraX, cameraY, arakeen5l2, spritesheet, palette);}
else if(room == 17){
tft.drawTilemap(cameraX, cameraY, arakeen5l3, spritesheet, palette);}
else if(room == 18){
tft.drawTilemap(cameraX, cameraY, arakeen6l1, spritesheet, palette);}
else if(room == 19){
tft.drawTilemap(cameraX, cameraY, arakeen6l2, spritesheet, palette);}
else if(room == 20){
tft.drawTilemap(cameraX, cameraY, arakeen7, spritesheet, palette);}
else if(room == 21){
tft.drawTilemap(cameraX, cameraY, arakeen8, spritesheet, palette);}
else if(room == 22){
tft.drawTilemap(cameraX, cameraY, arakeen9, spritesheet, palette);}
else if(room == 23){
tft.drawTilemap(cameraX, cameraY, arakeen10, spritesheet, palette);}
else if(room == 24){
tft.drawTilemap(cameraX, cameraY, dungeon2, spritesheet, palette);}
else if(room == 25){
tft.drawTilemap(cameraX, cameraY, village2, spritesheet, palette);}
else if(room == 26){
tft.drawTilemap(cameraX, cameraY, village2r1, spritesheet, palette);}
else if(room == 27){
tft.drawTilemap(cameraX, cameraY, village2r2, spritesheet, palette);}
else if(room == 28){
tft.drawTilemap(cameraX, cameraY, village2r3, spritesheet, palette);}
else if(room == 29){
tft.drawTilemap(cameraX, cameraY, village2r4, spritesheet, palette);}
else if(room == 30){
tft.drawTilemap(cameraX, cameraY, village2r5, spritesheet, palette);}
else if(room == 31){
tft.drawTilemap(cameraX, cameraY, village2r6, spritesheet, palette);}
else if(room == 32){
tft.drawTilemap(cameraX, cameraY, village2r7, spritesheet, palette);}
else if(room == 33){
tft.drawTilemap(cameraX, cameraY, village2r8l1, spritesheet, palette);}
else if(room == 34){
tft.drawTilemap(cameraX, cameraY, village2r8l2, spritesheet, palette);}
else if(room == 35){
tft.drawTilemap(cameraX, cameraY, dungeon3, spritesheet, palette);}
else if(room == 36){
tft.drawTilemap(cameraX, cameraY, village3, spritesheet, palette);}
else if(room == 37){
tft.drawTilemap(cameraX, cameraY, village3r1, spritesheet, palette);}
else if(room == 38){
tft.drawTilemap(cameraX, cameraY, village3r2, spritesheet, palette);}
else if(room == 39){
tft.drawTilemap(cameraX, cameraY, village3r3, spritesheet, palette);}
else if(room == 40){
tft.drawTilemap(cameraX, cameraY, village3r4, spritesheet, palette);}
else if(room == 41){
tft.drawTilemap(cameraX, cameraY, village3r5, spritesheet, palette);}
else if(room == 42){
tft.drawTilemap(cameraX, cameraY, village3r6l1, spritesheet, palette);}
else if(room == 43){
tft.drawTilemap(cameraX, cameraY, village3r6l2, spritesheet, palette);}
else if(room == 44){
tft.drawTilemap(cameraX, cameraY, dungeon4, spritesheet, palette);}
else if(room == 45){
tft.drawTilemap(cameraX, cameraY, desertp1, spritesheet, palette);}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////Buttons Repeat//////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
if (ButtonUp.update());
if (ButtonDown.update());
if (ButtonLeft.update());
if (ButtonRight.update());
if (ButtonA.update());
if (ButtonB.update());
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
ButtonUp.rebounce(10);
ButtonDown.rebounce(10);
ButtonLeft.rebounce(10);
ButtonRight.rebounce(10);
// ButtonA.rebounce(10);
ButtonA.rebounce(10);
///////////////////////////////////////////////////////////////////////////////
////////////////////////////Up/////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
if (ButtonUp.fallingEdge()){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulrearwa,palette);
tft.writeRectNBPP(player_x, player_y,16,16,4,paulrearwb,palette);
player_direction = 1;
player_y -= 4;
if(checkcolision())
{
player_y += 4;}
}
if(player_y <= 16){
player_y = 16;}
//////////////////////////////////////////////////////////////////////////////
///////////////////////////////Down///////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
if (ButtonDown.fallingEdge()){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulfrontwa,palette);
tft.writeRectNBPP(player_x, player_y,16,16,4,paulfrontwb,palette);
player_direction = 2;
player_y += 4;
if(checkcolision())
{
player_y -=4;}
}
if(player_y >= 224){
player_y = 224;}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////Left////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
if (ButtonLeft.fallingEdge()){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulleftw,palette);
tft.writeRectNBPP(player_x, player_y,16,16,4,paulleft,palette);
player_direction = 3;
player_x -= 4;
if(checkcolision())
{
player_x += 4;}
}
if(player_x >= 304){
player_x = 304;}
/////////////////////////////////////////////////////////////////////////////
////////////////////////////Right////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
if (ButtonRight.fallingEdge()){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulrightw,palette);
tft.writeRectNBPP(player_x, player_y,16,16,4,paulright,palette);
player_direction = 4;
player_x += 4;
if(checkcolision())
{
player_x -= 4;}
}
if(player_x <= 16){
player_x = 16;}
///////////////////////////////////////////////////////////////////////////////
//////////////////////////////PLAYER DIRECTION/////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
if (player_direction == 1){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulrear,palette);
}
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
else if (player_direction == 2){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulfront,palette);
}
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
else if (player_direction == 3){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulleft,palette);
}
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
else if (player_direction == 4){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulright,palette);
}
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////for use with movey blocks////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
else if (player_direction == 5){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulrearwa,palette);
}
else if (player_direction == 6){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulfrontwa,palette);
}
else if (player_direction == 7){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulleftw,palette);
}
else if (player_direction == 8){
tft.writeRectNBPP(player_x, player_y,16,16,4,paulrightw,palette);
}
};
so as you can see I need to make up several button control systems that I can separate so only the called function uses a certain set of buttons