:: PlayerAdvance.org ::  

Précédent   :: PlayerAdvance.org :: > :: Forums Hébergés :: > OldSchool Library > Aide au développement

Aide au développement Aide sur l'utilisation d'OSLib

Publicité

Réponse
 
Outils de la discussion Modes d'affichage
Vieux 19/01/2008, 15h37   #1
fiorello
Membre
 
Date d'inscription: 30/11/2007
Messages: 29
Par défaut Collision problems

Hi, im just starting with Oslib, i posted here topic but i know it was difficult so nobody helped me.

So

1st: How can i make collision on transparent color ??

example i have 2 maps: 1 is floor 2nd are solid (walls, building, river,)
So on 1st map in the place of solid thing will be transparent color (will be covered by map 2.

2nd question is what is the best method of group sprites and than detect collision with mob, building or npc ??

Thanks, and please answer.

Fiorello
fiorello est déconnecté   Réponse avec citation

Publicité

Vieux 21/01/2008, 02h17   #2
jo3_sum
Membre
 
Date d'inscription: 20/01/2008
Messages: 11
Par défaut

-this is wut i would do for the collision function. It returns 1 if its true and 0 for false.
Code PHP:
int collision(OSL_IMAGE *spriteOSL_IMAGE *block){
  if(((
sprite->block->&& (sprite->sprite->strechX) > block->x) || 
      (
sprite->block->&& (sprite->block->strechX) < block->x)) &&
     ((
sprite->block->&& (sprite->sprite->strechY) > block->y) ||
      (
sprite->block->&& (sprite->block->strechY) < block->y))) return 1; else return 0;

if you want to have a method for sprites colliding without being stuck on them. try this:
Code PHP:
OSL_IMAGE *sprite, *building;
int sprite_previousX sprite ->xsprite_previousY sprite->y;

if(
collision(sprite,building)){
  
sprite->sprite_previousX;
  
sprite->sprite_previousY;
}else{
  
sprite_previousX sprite->x;
  
sprite_previousY sprite->y;

theres a better method for collision. i'll edit this post with it later.
EDIT:
here is a better collision function i jus wrote up practically combining the first two codes into one function, lets call it a contact function.
Code PHP:
void  contact(OSL_IMAGE *spriteOSL_IMAGE *block){
  
int prevXprevY;
  
//X
  
if(((sprite->block->x)&&(sprite->sprite->strechX block-> x))||((sprite->block->x)&&(sprite->block->strechX block-> x))){
    if(
prevX block->xsprite->block->sprite->strechX;
    if(
prevX block->xsprite->block->block->strechX;
  }else{
    
prevX sprite->x;
  }
  
//Y
  
if(((sprite->block->y)&&(sprite->sprite->strechY block-> y))||((sprite->block->y)&&(sprite->block->strechY block-> y))){
    if(
prevY block->ysprite->block->sprite->strechY;
    if(
prevY block->ysprite->block->block->strechY;
  }else{
    
prevY sprite->y;
  }


Dernière modification par jo3_sum ; 21/01/2008 à 11h01.
jo3_sum est déconnecté   Réponse avec citation
Vieux 21/01/2008, 14h59   #3
fiorello
Membre
 
Date d'inscription: 30/11/2007
Messages: 29
Par défaut

Woah thanks first person that wans to help me.

What should i do if center of my sprite is the excatly center (/2) and what should i do to detect collision for all solid and my sprite.

I post code here and i hope someone help me.

The problem is i dont know how to detect collision for mobs, walls, building, npc, other players (i want to make it mmo) so its something like this

if (sprite collidewith(solid) than some function that stops it.

And i dont know how to make that ony sprite (floor) is "stepable" and the others are solid. Just like i can make sprite->x or y. I want to do something like this: bulding1->solid = 1, grass->solid = 0

Please tell my if u understand.

thanks
Fiorello

PS. Give me you e-mail, it will be easier to comunicate

Dernière modification par fiorello ; 21/01/2008 à 15h11.
fiorello est déconnecté   Réponse avec citation
Vieux 21/01/2008, 20h23   #4
fiorello
Membre
 
Date d'inscription: 30/11/2007
Messages: 29
Par défaut

Citation:
Envoyé par fiorello Voir le message
Woah thanks first person that wans to help me.

What should i do if center of my sprite is the excatly center (/2) and what should i do to detect collision for all solid and my sprite.

I post code here and i hope someone help me.

The problem is i dont know how to detect collision for mobs, walls, building, npc, other players (i want to make it mmo) so its something like this

if (sprite collidewith(solid) than some function that stops it.

And i dont know how to make that ony sprite (floor) is "stepable" and the others are solid. Just like i can make sprite->x or y. I want to do something like this: bulding1->solid = 1, grass->solid = 0

Please tell my if u understand.

thanks
Fiorello


PS. Give me you e-mail, it will be easier to comunicate

PLS. Give me your IM aol, microsoft messanger or whateva.
fiorello est déconnecté   Réponse avec citation
Vieux 21/01/2008, 22h59   #5
jo3_sum
Membre
 
Date d'inscription: 20/01/2008
Messages: 11
Par défaut

Code PHP:
void  mapContact(OSL_IMAGE *spriteint blockXint blockYint blockWidthint blockHeightint a[]){
  
  
int prevXprevY000;

  for(
0a[i] == '\0'i++){

    if(
a[i] == || a[i] == 0){

      if(
a[i] == 1){

        
//X
        
if(((sprite->< (blockX + (blockWidth))&&(sprite->sprite->strechX > (blockX + (blockWidth)))||((sprite->> (blockX + (blockWidth))&&(sprite->blockWidth < (blockX + (blockWidth)))){
          if(
prevX < (blockX + (blockWidth)) sprite->= (blockX + (blockWidth) - sprite->strechX;
          if(
prevX > (blockX + (blockWidth)) sprite->= (blockX + (blockWidth) + blockWidth;
        }else{
          
prevX sprite->x;
        }
        
//Y
        
if(((sprite->< (blockY + (blockHeight))&&(sprite->sprite->strechY > (blockY + (blockHeight)))||((sprite->> (blockY + (blockHeight))&&(sprite->blockHeight < (blockY + (blockHeight)))){
          if(
prevY < (blockY + (blockHeight)) sprite->= (blockY + (blockHeight) - sprite->strechY;
          if(
prevY > (blockY + (blockHeight)) sprite->= (blockY + (blockHeight) + blockHeight;
        }else{
          
prevY sprite->y;
        }
      }

      
m++;
    }
    if(
a[i] == 2){

      
0;
      
++;
    }
  }

lets say this is your map and each tile is 8X8 pixels.
the gray tiles will represent solid objects such as a block or wall and the white the floor.



to use the function shown above with this map we would put:
Code PHP:
mapContact(sprite,
           
mapX/*the x coordinates of the map*/
           
mapY/*the y coordinates of the map*/
           
8/*the width of a tile*/
           
8/*the height of the tile*/
           
mapSolid[
                    
1,1,1,1,1,1,1,1,1,1,2,   //row 1
                    
1,0,1,0,0,0,0,0,0,1,2,   //row 2
                    
1,0,1,1,1,1,1,0,0,1,2,   //row 3
                    
1,0,0,0,0,0,1,0,0,1,2,   //4
                    
1,1,1,0,0,0,1,1,0,1,2,   //5
                    
1,0,0,0,1,0,1,0,0,1,2,   //6
                    
1,0,0,0,1,0,1,0,0,1,2,   //7
                    
1,1,1,1,1,0,0,0,0,1,2,   //8
                    
1,0,0,0,0,0,0,0,0,1,2,   //9
                    
1,1,1,1,1,1,1,1,1,1]     //10
           
); 

Dernière modification par jo3_sum ; 22/01/2008 à 02h11.
jo3_sum est déconnecté   Réponse avec citation
Vieux 22/01/2008, 23h52   #6
fiorello
Membre
 
Date d'inscription: 30/11/2007
Messages: 29
Par défaut

Ok thanks for this, i used this

Next question is how do i install Sony/Danzeff OSK to work and store the string in a ex. char string text and so i can than make oslPrintf("%d",text). Thanks
fiorello est déconnecté   Réponse avec citation
Vieux 23/01/2008, 02h12   #7
jo3_sum
Membre
 
Date d'inscription: 20/01/2008
Messages: 11
Par défaut

Citation:
Envoyé par fiorello Voir le message
Ok thanks for this, i used this

Next question is how do i install Sony/Danzeff OSK to work and store the string in a ex. char string text and so i can than make oslPrintf("%d",text). Thanks
What's Sony/Danzeff OSK?

And if text is a string, you wouldn't have "%d" but "%s" inside the oslPrintf() function.
jo3_sum est déconnecté   Réponse avec citation
Vieux 23/01/2008, 16h31   #8
fiorello
Membre
 
Date d'inscription: 30/11/2007
Messages: 29
Par défaut

ohh i see that programming is known to u but the in the psp development u should learn more.

OSK is on screen keyboard that u write on.
fiorello est déconnecté   Réponse avec citation
Vieux 23/01/2008, 21h51   #9
jo3_sum
Membre
 
Date d'inscription: 20/01/2008
Messages: 11
Par défaut

can u show me wut it is?
maybe i've seen it.
jo3_sum est déconnecté   Réponse avec citation
Vieux 23/01/2008, 23h23   #10
fiorello
Membre
 
Date d'inscription: 30/11/2007
Messages: 29
Par défaut

Citation:
Envoyé par jo3_sum Voir le message
can u show me wut it is?
maybe i've seen it.
Go to ur web explorer in psp and click on adress, then the OSK appears to type the adress.
fiorello est déconnecté   Réponse avec citation
Vieux 24/01/2008, 00h36   #11
jo3_sum
Membre
 
Date d'inscription: 20/01/2008
Messages: 11
Par défaut

oh, that thing. no i don't know how to store a string by using that. why would you want to use that.
jo3_sum est déconnecté   Réponse avec citation
Vieux 24/01/2008, 17h10   #12
fiorello
Membre
 
Date d'inscription: 30/11/2007
Messages: 29
Par défaut

For chatting in my MMO
fiorello est déconnecté   Réponse avec citation
Vieux 07/04/2008, 20h41   #13
fiorello
Membre
 
Date d'inscription: 30/11/2007
Messages: 29
Par défaut

Ok, i come back.

Pls tell me, with that function you last wrote to me. How to make function that returns 1 or 0 if there is call for ex. collision(UP); So i can do something like this:

if(collision(up))
{
...moving char...
}

thanks
fiorello est déconnecté   Réponse avec citation
Réponse

Liens sociaux

Publicité



Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 
Outils de la discussion
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h15.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince