Praticamente ho la sovrapposizione di più muri.
Io proverei a tener conto, nella generazione dei muri, di un 'offset' minimo tra un muro e l'altro, in modo che ci sia lo spazio 'fisico' per far passare il personaggio.





Code: Select all
//------------------menu
process menu()
private
int posizione;
begin
testo[1]=write(0,400,150,1,"Fall to win");
testo[2]=write_var(0,400,160,1,version);
sfondo(400,240,10);
logo(400,100,9);
fakemarco(260,220,8);
posizione=1;
x=400;y=340;
loop
switch (posizione)
case 1 : posizione=1;//-------------start
graph=41;
frame(500);
if (key(_DOWN)) posizione=2; end
if (key(_SPACE)); principale(); break; end
if (key(_END)); principale(); break; end //tasto B su Pandora
end //endcase
case 2 : posizione=2;//------------option
graph=42;
frame(500);
if (key(_UP)) posizione=1; end
if (key(_DOWN)) posizione=3; end
// if (key(_SPACE)); //menu opzioni ...........se abilito anche questa riga mi da errore!!!
if (key(_END)); //tasto B menu opzioni su Pandora
end
end //endcase
case 3 : posizione=3;//--------------Bonus
graph=43;
frame(500);
if (key(_UP)) posizione=2; end
if (key(_DOWN)) posizione=4; end
//if (key(_SPACE)); //menu BONUS...........se abilito anche questa riga mi da errore!!!
if (key(_END)); //tasto B menu Bonus su Pandora
end
end //endcase
case 4 : posizione=4;//--------------exit
graph=44;
frame(500);
if (key(_UP)) posizione=3; end
if (key(_SPACE))esci=1; end
if (key(_END)) esci=1; end //tasto B su Pandora
end //endcase
end //endswitch
frame;
end
end
Code: Select all
//-------------------------marco----
Process marco(x,y,z)
private
//Variabili utilizzate per gestire gli id dei processi durante le collisioni (se servissero in altri processi, toglierli da qui e metterli globali)
muro idMuro;
fuoco idFuoco;
//Variabili private
int premuto;
int premuto2;
int premuto3;
int m_animazione;
int togliVita; //Usata per rimuovere una vita in caso di collisione
int startInvincibilita; //Memorizza l'inizio dell'invincibilità per disattivarla dopo un tempo fisso
begin
graph=10;
palla=0;
invincibile=0;
m_animazione=10;
loop
if(key(_left)) x=x-6; angle=+20000; else angle=0; end
if(key(_right)) x=x+6; angle=-20000; end
if(key(_up)) y=y-6; end
if(key(_down)) y=y+6; end
// if((get_timer()-last_time)>1000)
// if(key(_SPACE))
// last_time=get_timer();
// palla=1; graph=20;
// angle=0;
// frame;
// else palla=0; graph=10;
// end
// end //--appallottolamento
if(palla==0&&(get_timer()-last_time)>50)
graph=m_animazione; m_animazione+=1; frame;
last_time=get_timer();
if (m_animazione>11)
m_animazione=10;
end
end
//if((get_timer()-last_time)>500)
/// se abilito anche queste righe mi da errore nel compilare........
//if(key(_SPACE))
// last_time=get_timer();
// palla=1; graph=20;
// frame;
//else
// palla=0;
if(key(_CONTROL)) // tasto R su pandora
last_time=get_timer();
palla=1; graph=20;
frame;
else
palla=0;
end
//end //--appallottolamento
/// se abilito anche queste righe mi da errore nel compilare........
//if((key(_Z))&& premuto==0 &&palla==0 &&nfiamme>0) fiamme(x-27,y+12);premuto=1; nfiamme=nfiamme-1;end //sparafuoco
//if(!key(_Z)) premuto=0; end
//if((key(_C))&& premuto2==0 &&palla==0 &&nacqua>0) acqua(x+27,y+12);premuto2=1; nacqua=nacqua-1; end //sparaacqua
//if(!key(_C)) premuto2=0; end
//if((key(_X))&& premuto3==0 &&palla==0 &&nfiocco>0) fiocco(x,y+4);premuto3=1; nfiocco=nfiocco-1; end //sparafiocco
//if(!key(_X)) premuto3=0; end
////////////////pandora button
// X: Page Down
if((key(_PGDN))&& premuto==0 &&palla==0 &&nfiamme>0) fiamme(x-27,y+12);premuto=1; nfiamme=nfiamme-1;end //sparafuoco
if(!key(_PGDN)) premuto=0; end
// Y: Page Up
if((key(_PGUP))&& premuto2==0 &&palla==0 &&nacqua>0) acqua(x+27,y+12);premuto2=1; nacqua=nacqua-1; end //sparaacqua
if(!key(_PGUP)) premuto2=0; end
// A: Home
if((key(_HOME))&& premuto3==0 &&palla==0 &&nfiocco>0) fiocco(x,y+4);premuto3=1; nfiocco=nfiocco-1; end //sparafiocco
if(!key(_HOME)) premuto3=0; end
///////////////////////////////////////
if(y<15) y=15; end //limite_superiore
if(y>460) y=460; end //limite_inferiore
if(x<260) x=260; end //limite SX
if(x>540) x=540; end //limite DX
//-------------------------------------------------------------------------
togliVita = 0; //Resetta la variabile utilizzata per togliere una vita
//-------------------------------------------------------------------------
//Le collisioni vengono gestite solo se il personaggio non è invincibile
//Se è già avvenuta una collisione salta i controlli delle altre collisioni (può essere tolto il controllo se si vogliono gestire ad esempio animazioni particolari su più collisioni)
//-------------------------------------------------------------------------
//Collisione con muro
if(togliVita==0)
idMuro=collision(type muro);
if(idMuro)
//Se il muro non è già stato distrutto allora controlla la collisione
if(idMuro.distrutto==0)
if((idMuro.ghiacciato==1) && (palla==1))
//Rende il muro trasparente in quanto viene attraversato e indica che non è più 'pericoloro' ad eventuali passaggi successivi
idMuro.alpha = 50;
idMuro.distrutto = 1;
elseif(invincibile == 0)
//Se il personaggio non è invincibile toglie una vita
togliVita = 1;
end
end
end
end
//-------------------------------------------------------------------------
//Collisione con fuoco
if(togliVita==0)
idFuoco=collision(type fuoco);
if(idFuoco)
//Se il fuoco non è già stato distrutto allora controlla la collisione
if(idFuoco.distrutto==0)
if(idFuoco.spento==1)
//Rende il fuoco trasparente in quanto viene attraversato e indica che non è più 'pericoloro' ad eventuali passaggi successivi
idFuoco.alpha = 50;
idFuoco.distrutto = 1;
elseif(invincibile == 0)
//Se il personaggio non è invincibile toglie una vita
togliVita = 1;
end
end
end
end
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//Gestione Vita
if ((collision(type legno) && palla==0)
or (collision(type laser) && laserspento==0)
or togliVita == 1)
if(invincibile==0)
vite=vite-1; //diminuisce 1 vita
invincibile=1; //diventa invincibile
alpha=100; //trasparentizza
startInvincibilita=get_timer(); //Memorizza il tempo iniziale dell'invincibilità
end
else
//Check Invincibile
if(invincibile==1)
//Controlla per quanto tempo invincibile è a 1
if((get_timer()-startInvincibilita)>1000) //Dopo un secondo resetta l'invincibilità
invincibile=0; //ritorna normal
alpha=1000; //opacizza
end
end
end //Se sbatti col muro muori
//-------------------------------------------------------------------------
frame;
end
end

Code: Select all
rand_seed(time());



Code: Select all
if (collision (type fuoco))
frame; break;

