亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? race_canvas3d.java

?? 這是一個Micro3D的學習代碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.io.*;
import java.lang.*;
import java.util.*;
import com.mascotcapsule.micro3d.v3.*;

/*
 * Main canvas - used to create, manage and display 3D world
 */
public class Race_Canvas3D extends GameCanvas implements CommandListener
{
  private Race_Main app;    // reference to main appplication class
  Command exitCommand;      // Soft keys

  // constants
  private final int WIDTH, HEIGHT;              // screen coordinates
  private final static int KMaxSpeed = 40;      // maximum speed car can have
  private final static int KAccelerateSpeed = 4;// accelerate with this value
  private final static int KBreakSpeed = 10;    // brake with this speed value
  private final static int KRotStep = 200;      // turn car and camera step
  private final static int KShiftWord = 30;     // to shift camera position
  float KDegreeFactor = (360.0f/4096.0f);       // used for calculating degrees

  // precalculated table of sin and cos values: 0-360 degrees
  float[] sinTab;
  float[] cosTab;

  private Light light = new Light(new Vector3D(-146, 293, 439), 3730, 1626 );
  private Effect3D effect = new Effect3D();

  // variables used to init camera position
  private Vector3D POS = new Vector3D(0, RoadDef.mGameInitY, -RoadDef.KDistance+15);
  private Vector3D LOOK  = new Vector3D(0, 0, -4096);
  private Vector3D UP    = new Vector3D(0, 4096, 0);
  private int pers = 512;    // angle of visible space

  // transformates used to control camera position and orientation
  private AffineTrans mCamMove = new AffineTrans();
  private AffineTrans mCamRotZ = new AffineTrans();
  private AffineTrans mCamera = new AffineTrans();
  private int mCamAngleZ = 0;       // camera's current angles
  // if position or rotation was changed, objects need to update themselves according to camera
  private boolean mCamereNeedUpdate = true;

  // true - car goes toward finish; false - car goes back to start position
  private boolean carMoveForward = true;
  // car's speed vector
  private Vector3D carSpeedVect = new Vector3D(0, 0, 0);
  // car's speed value (speed vector length)
  private int carSpeedValue = 0;

  // this is a counter for number of game reiteration step
  private int canvasStepCounter = 0;

  private FPS mFps = new FPS();     // to obtain current frame rate
  private WallContainer road;      // road for our world
  private CarUnit myCar;            // car that can be controled by user

////////////////////////////////////////////////////////////////////////////////
// multi-player part
  private boolean mIsMulti = false; // true - 2 players game, awatar is created
  
  private CarUnit awatarCar = null; // avatar car is our party's car
  private Vector3D awatarSpeedVect = new Vector3D(0, 0, 0);
  private int mAvatarUpdateStep = 0;

  private int mCarTwiceRadSqare = (2*30)*(2*30); // square of twice of car radius

  Vector3D aCarPosVect = new Vector3D(0, 0, 0) ;// current car position, to send to other player
  private boolean mMovingFunctionPending = false;

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//                             FUNCTIONS                                     //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

  public Race_Canvas3D(Race_Main app, boolean aIsOtherParty, boolean aPosServer)
  {
    super(false);
    this.app = app;
    mIsMulti = aIsOtherParty;

    setFullScreenMode(true);

    exitCommand = new Command("Quit", Command.EXIT, 1);
    addCommand(exitCommand);
    setCommandListener(this);

    effect.setShadingType(Effect3D.NORMAL_SHADING);
    effect.setLight(light);

    // set screen width and height variables
    WIDTH = getWidth();
    HEIGHT = getHeight();

    // init camera
    mCamMove.setIdentity();
    mCamMove.lookAt( POS, LOOK, UP);

    mCamRotZ.setIdentity();
    mCamRotZ.rotationZ(mCamAngleZ);

    mCamera.setIdentity();
    mCamera.mul(mCamRotZ, mCamMove);
    mCamereNeedUpdate = false;

    try {
      // init sin and cos table
      sinTab = new float[361];
      cosTab = new float[361];
      for( int i=0; i<361; ++i )
      {
        sinTab[i] = (float)Math.sin(Math.toRadians((double)i));
        cosTab[i] = (float)Math.cos(Math.toRadians((double)i));
      }
      // build road (road also reads map)
      road = new WallContainer(WIDTH, HEIGHT, mCamera, effect);
      AffineTrans tmpAT = new AffineTrans();
      // if one player game - build only car
      if(!mIsMulti)
        myCar = new CarUnit(0, RoadDef.mGameInitY, RoadDef.KDistance+5,
                            WIDTH, HEIGHT, mCamera, tmpAT, effect);
      // in two players' mode build also awatar
      else
      {
        // Cars are placed both at start line, moved by either +/- 50 on X from
        // initial position. Server's car on one side, client's car on the other.
        if(aPosServer)
        {
          myCar = new CarUnit(50, RoadDef.mGameInitY, RoadDef.KDistance+5,
                              WIDTH, HEIGHT, mCamera, tmpAT, effect);
          moveWorldCam(-50, 0, 0);
          awatarCar = new CarUnit(-50, RoadDef.mGameInitY, RoadDef.KDistance+5,
                                  WIDTH, HEIGHT, mCamera, tmpAT, effect);
        }
        else
        {
          myCar = new CarUnit(-50, RoadDef.mGameInitY, RoadDef.KDistance+5,
                              WIDTH, HEIGHT, mCamera, tmpAT, effect);
          moveWorldCam(50, 0, 0);
          awatarCar = new CarUnit(50, RoadDef.mGameInitY, RoadDef.KDistance+5,
                                  WIDTH, HEIGHT, mCamera, tmpAT, effect);
        }
      tmpAT = null;
      }
    }
    catch (Exception e) {
      System.out.println("ERROR: Race_Canvas3D::Race_Canvas3D()" + e);
    }
    System.out.println("Race_Canvas3D created");
  }

  public void paint( Graphics g )
  {
    g.setColor(0x77AAAA);
    g.fillRect(0,0, WIDTH, HEIGHT);
    Graphics3D g3d = new Graphics3D();

    // before drawing elements, make sure they have updated their positions with relation to camera
    if( mCamereNeedUpdate )
    {
      setCamera();
      road.updateCamPosition(mCamera);
      myCar.updateCamPosition(mCamera);
      if(mIsMulti)
        awatarCar.updateCamPosition(mCamera);
    }
    g3d.bind(g);
    road.render(g3d);
    myCar.render(g3d);
    if(mIsMulti)
      awatarCar.render(g3d);
    g3d.flush();
    g3d.release( g );
    g3d = null;

    // draw some usefull text
    int textPosY = HEIGHT - 30;
    mFps.calculateFps();
    g.setColor(0xFFFFFF);
    g.drawString(mFps.getFpsString(), 0, textPosY, 0);  // frames per second
    g.drawString(myCar.getCarString(), 50, textPosY, 0);// car's X,Y position

    textPosY = HEIGHT - 15;
    g.drawString(road.getRoadString(), 0, textPosY, 0); // no of road units existing
    String str = "Step: " + canvasStepCounter;
    g.drawString(str, 50, textPosY, 0);                 // no of steps since begining of the game
    String strDir;
    if(carMoveForward)
      strDir = "Front";
    else
      strDir = "Back";
    g.drawString(strDir, 140, textPosY, 0);             // car's move on the road direction
    System.gc();
  }

  public void doMove()
  {
    mMovingFunctionPending = true;
    moveObjects();
    mMovingFunctionPending = false;
  }

  public void clearResource()
  {
  }

  // handle soft keys command
  public void commandAction(Command command, Displayable displayable)
  {
    if(command == exitCommand)
    {
      clearResource();
      try {
        app.destroyApp(true);
      }
      catch(Exception e) {}
    }
  }

  public void handleKey()
  {
    int key = getKeyStates();
    if( (key & UP_PRESSED) != 0)      // accelerate
    {
      if(carSpeedValue >= KMaxSpeed)
        return;
      // break faster than normal acceleration
      if( carSpeedValue < 0 )
        carSpeedValue += KBreakSpeed;
      else
        carSpeedValue += KAccelerateSpeed;
      // set top speed limit
      if(carSpeedValue > KMaxSpeed)
        carSpeedValue = KMaxSpeed;
      updateCarMoveDirection(true);
      return;
    }
    if( (key & DOWN_PRESSED) != 0)  // deaccelerate
    {
      if(carSpeedValue <= -KMaxSpeed)
        return;
      if( carSpeedValue > 0 )
        carSpeedValue -= KBreakSpeed;
      else
        carSpeedValue -= KAccelerateSpeed;
      // set top speed limit
      if(carSpeedValue < -KMaxSpeed)
        carSpeedValue = -KMaxSpeed;
      updateCarMoveDirection(true);
      return;
    }
    if( (key & LEFT_PRESSED) != 0)
    {
      myCar.rotate(0, KRotStep, 0);   // turn left
      rotateWorldCam(KRotStep);       // turn left
      updateCarMoveDirection(true);
      return;
    }
    if( (key & RIGHT_PRESSED) != 0)
    {
      myCar.rotate(0, -KRotStep, 0);  // turn right
      rotateWorldCam(-KRotStep);      // turn right
      updateCarMoveDirection(true);
      return;
    }
    if( (key & FIRE_PRESSED) != 0)
    {
      carSpeedValue = 0;
      updateCarMoveDirection(true);
      return;
    }
  }

  // update camera's affine transformation according to current position and angles
  private void setCamera()
  {
    mCamRotZ.setIdentity();
    mCamRotZ.rotationZ(mCamAngleZ);

    mCamera.setIdentity();
    mCamera.mul(mCamRotZ, mCamMove);

    mCamereNeedUpdate = false;
  }

  private void moveWorldCam(int aX, int aY, int aZ)
  {
    mCamereNeedUpdate = true;
    mCamMove.m03 += aX;
    mCamMove.m13 += aY;
    mCamMove.m23 += aZ;
  }

  private void rotateWorldCam(int aZ)
  {
    mCamereNeedUpdate = true;
    mCamAngleZ += aZ;
    mCamAngleZ = mCamAngleZ & 4095;
  }

  // canvas main loop, it performes actual move and colision handling
  private void moveObjects()
  {
    ++canvasStepCounter;
    if( !mIsMulti ) {
      // if single player and speed is 0, car is not moving so no need to carry on
      if( carSpeedValue == 0 )
        return;
    }
    else {
      if( !isCarCollisionWithAvatar() )
        moveAvatar();
      else
      {
        // get current car's position
        myCar.getLocation(aCarPosVect);
        if(app.sendSignalColision(aCarPosVect, myCar.getSpinAngleY(), carSpeedVect))
        {
          // if collision signal message was sent, stop moving to wait for responce
          mAvatarUpdateStep = 0;
          return;
        }
      }
    }
    // check if car collides with road's side borders
    if( !isCarCollidesWithRoadSides() )
    {
      myCar.move(carSpeedVect.x, carSpeedVect.y);
      // camera folows the car
      moveWorldCam(-carSpeedVect.x, carSpeedVect.y, 0);
    }
    try
    {
      // update road - remove invisible parts, add new ones that becomes visible
      road.updateRoad(carMoveForward, myCar.getPosX(), myCar.getPosY(),
                       WIDTH, HEIGHT, mCamera);
      // car shouldn't leave track at the start or the end of the road
      if( road.isOutOnFinish(myCar.getPosY()) || 
          road.isOutOnStart(myCar.getPosY()) )
      {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91丝袜在线18| 国产高清不卡一区二区| 欧美一区二区免费观在线| 精品一区二区三区影院在线午夜 | 日本成人中文字幕| 久久综合国产精品| 在线视频国内自拍亚洲视频| 激情偷乱视频一区二区三区| 中文字幕在线不卡国产视频| 6080yy午夜一二三区久久| 国产福利91精品一区| 舔着乳尖日韩一区| 日本一区二区视频在线观看| 69成人精品免费视频| 成人黄色免费短视频| 日本不卡视频在线观看| 中文字幕日韩一区| 精品成人一区二区三区四区| 欧美色精品在线视频| 成人一道本在线| 精一区二区三区| 亚洲成人av在线电影| 国产精品传媒在线| 337p日本欧洲亚洲大胆色噜噜| 在线视频中文字幕一区二区| 丁香婷婷综合五月| 人人超碰91尤物精品国产| 亚洲欧美日韩在线不卡| 国产欧美一区二区精品性色| 正在播放一区二区| 欧美日韩一区二区三区高清| av高清不卡在线| 国产麻豆精品在线| 精品亚洲成a人| 轻轻草成人在线| 亚洲国产精品影院| 一区av在线播放| 国产精品久久福利| 国产精品久久久久9999吃药| 国产午夜精品在线观看| 日韩欧美aaaaaa| 欧美一级搡bbbb搡bbbb| 欧美老肥妇做.爰bbww| 欧美性淫爽ww久久久久无| 91天堂素人约啪| 成人av高清在线| av亚洲产国偷v产偷v自拍| 国产麻豆精品在线观看| 激情偷乱视频一区二区三区| 激情综合五月天| 麻豆成人91精品二区三区| 日韩电影免费在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲成a人在线观看| 亚洲国产wwwccc36天堂| 亚洲一区二区精品视频| 亚洲一区二区三区美女| 亚洲成a人片在线观看中文| 天天爽夜夜爽夜夜爽精品视频| 亚洲国产日韩在线一区模特| 亚洲高清免费一级二级三级| 亚洲精品中文在线| 亚洲欧美一区二区久久| 国产精品久久99| 中文在线资源观看网站视频免费不卡 | 国产午夜精品一区二区三区嫩草 | 久久精品二区亚洲w码| 亚洲国产精品一区二区www在线| 18欧美亚洲精品| 亚洲黄色免费电影| 亚洲国产精品一区二区久久恐怖片| 丁香桃色午夜亚洲一区二区三区| 亚洲综合在线第一页| 亚洲午夜三级在线| 蜜桃一区二区三区四区| 国产在线国偷精品产拍免费yy| 国产精品自拍av| 国产不卡免费视频| 色婷婷激情久久| 91精品国产福利| 久久久久久久久久美女| 亚洲欧美精品午睡沙发| 亚洲大片一区二区三区| 另类人妖一区二区av| 国产精品资源站在线| 91亚洲国产成人精品一区二三| 欧美中文字幕一区二区三区亚洲 | 国产一区欧美二区| 成人aaaa免费全部观看| 欧美日韩国产高清一区二区三区 | 久久久久久久久久美女| **网站欧美大片在线观看| 亚洲一区二区三区视频在线播放| 日本va欧美va精品| 成人国产精品免费观看视频| 欧美亚洲国产一区二区三区| 精品久久久久久综合日本欧美| 国产精品久久久久永久免费观看| 亚洲高清三级视频| 国产成人精品免费在线| 欧美色网一区二区| 国产三级久久久| 亚洲综合激情网| 国产另类ts人妖一区二区| 一本一道综合狠狠老| 日韩一级大片在线观看| 一区二区三区在线免费| 久久99久久精品| 在线免费观看成人短视频| 精品国产3级a| 午夜婷婷国产麻豆精品| 99精品欧美一区二区蜜桃免费| 欧美年轻男男videosbes| 国产精品久久久久aaaa| 国内精品国产成人国产三级粉色| 色八戒一区二区三区| 久久精品欧美日韩| 日韩黄色免费电影| 91久久一区二区| 亚洲国产精品黑人久久久| 日本不卡免费在线视频| 色成人在线视频| 中文字幕在线不卡一区| 国产精品中文字幕一区二区三区| 欧美日韩免费电影| 亚洲欧美色综合| 高清免费成人av| 精品久久久久久综合日本欧美| 亚洲电影视频在线| 91久久人澡人人添人人爽欧美 | 亚洲中国最大av网站| av高清不卡在线| 欧美国产欧美综合| 国产一区在线精品| 日韩午夜精品电影| 日韩经典中文字幕一区| 91精品福利在线| 亚洲特黄一级片| 暴力调教一区二区三区| 国产日韩精品一区二区三区| 久久国产福利国产秒拍| 91麻豆精品国产自产在线 | 亚洲欧洲色图综合| 国产传媒欧美日韩成人| 久久久精品影视| 国产福利一区二区| 久久精品人人做| 福利电影一区二区| 国产日产欧美精品一区二区三区| 国产激情91久久精品导航| 久久久美女艺术照精彩视频福利播放| 日本午夜精品一区二区三区电影 | 久色婷婷小香蕉久久| 欧美日本一区二区三区| 天堂成人国产精品一区| 欧美日韩国产综合久久| 亚洲欧美另类在线| 91成人在线观看喷潮| 亚洲婷婷在线视频| av中文一区二区三区| 国产精品久久久久久亚洲伦 | 亚洲激情成人在线| 色综合婷婷久久| 亚洲日本va午夜在线影院| 成人av网站免费观看| 中文字幕第一页久久| 秋霞国产午夜精品免费视频| 欧美日韩激情一区二区三区| 一区二区三区av电影| 欧美色手机在线观看| 另类小说综合欧美亚洲| 久久青草欧美一区二区三区| jiyouzz国产精品久久| 亚洲免费观看高清完整版在线观看熊 | 亚洲免费三区一区二区| 欧美日韩久久一区二区| 久久99热这里只有精品| 国产拍揄自揄精品视频麻豆| 97国产一区二区| 国产精品91一区二区| 玉米视频成人免费看| 欧美一区二区三区免费观看视频| 裸体歌舞表演一区二区| 亚洲国产岛国毛片在线| 色网综合在线观看| 蜜臀av国产精品久久久久| 国产精品亲子乱子伦xxxx裸| 在线观看中文字幕不卡| 国产一区高清在线| 亚洲天天做日日做天天谢日日欢 | 欧美人与z0zoxxxx视频| 精品一区二区三区香蕉蜜桃| 中文字幕va一区二区三区| 欧美群妇大交群中文字幕| 国产一区二区三区电影在线观看 | 国产性色一区二区| 欧美日韩中文国产| 成人中文字幕合集| 丝袜脚交一区二区| 综合婷婷亚洲小说|