示例#1
0
void geom_step(float dt)
{
    int i;

    sol_move(&goal.vary, NULL, dt);
    sol_move(&jump.vary, NULL, dt);

    for (i = 0; i < GEOM_MAX; i++)
        sol_move(&item[i].vary, NULL, dt);

    ball_step(dt);
}
示例#2
0
文件: jball.c 项目: xrl/Jezzball
void move_ball(jball *ball){
   int xstep, ystep;
   int collision_on_x, collision_on_y;
   
   jwall *game_wall = NULL;
   
   collision_on_x = wall_or_ball_located_to(ball->x_dir,ball->x_loc,ball->y_loc);
   collision_on_y = wall_or_ball_located_to(ball->y_dir,ball->x_loc,ball->y_loc);
   
   // We need to make the collision was not caused by an in game wall
   // because we do not want to change direction on that, plus
   // we want to disable that wall
   if(collision_on_x == 1 && collision_on_y == 1){
      game_wall = game_wall_at(ball->x_loc+ball_step(ball->x_dir),
                               ball->y_loc+ball_step(ball->y_dir));
      if(game_wall != NULL){
         collision_on_x = 0;
         collision_on_y = 0;
      }
   }
   else if(collision_on_x == 1){
      game_wall = game_wall_at(ball->x_loc+ball_step(ball->x_dir),
                               ball->y_loc);
      if(game_wall != NULL){
         collision_on_x = 0;
      }
   }
   else if(collision_on_y == 1){
      game_wall = game_wall_at(ball->x_loc,
                               ball->y_loc+ball_step(ball->y_dir));
      if(game_wall != NULL){ // This collision doesn't count, we'll keep going in the y_dir
         collision_on_y = 0;
      }
   }
   
   deactivate_game_wall(game_wall); // It checks for NULL
   
   
   ball->x_dir = new_ball_dir(collision_on_x,ball->x_dir);
   ball->y_dir = new_ball_dir(collision_on_y,ball->y_dir);
   xstep = ball_step(ball->x_dir);
   ystep = ball_step(ball->y_dir);
   
   ball->x_loc = ball->x_loc+xstep;
   ball->y_loc = ball->y_loc+ystep;
   return;
}