📄 cplayer.java
字号:
import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.Sprite;
public class CPlayer extends CActor implements Const{
int[] stand = {0};
int[] walk = {1, 2, 3, 4, 5, 6};
int[] fd = {7, 7, 7, 7, 9, 7, 9, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7};
int[] jump = {10, 11, 12, 13};
public CPlayer(){
this.isLive = true;
this.frame_w = 20;
this.frame_h = 32;
try {
this.img = Image.createImage("/imgrun.png");
} catch (IOException e) {
e.printStackTrace();
}
this.colNum = img.getWidth() / frame_w;
setFrame(walk);
setPosition(80, 120);
setSpeed(3);
}
CMap colMap;
void setMap(CMap map){
colMap = map;
}
void paint(Graphics g) {
if(!isLive)
return;
int flag = isLeft ? Sprite.TRANS_NONE : Sprite.TRANS_MIRROR;
g.drawRegion(img,
(frameIndex % colNum) * frame_w,
(frameIndex / colNum) * frame_h,
frame_w, frame_h,
flag, x, y, 0);
update();
nextFrame();
playercounter ++;
}
public static int playerstatus = PS_STAND;
public int playercounter = 0;
void update() {
//System.out.println(playerstatus);
if(CGame.gameStatus == Const.GS_GAMEOVER)
return;
switch(playerstatus){
case PS_STAND:
if(playercounter == 30)
setNewStatus(PS_FD);
// if(!CGame.isPressedKey(CGame.MKEY_LEFT) && !CGame.isPressedKey(CGame.MKEY_RIGHT))
// setFrame(stand);
if(x >= 80 && CGame.isPressedKey(CGame.MKEY_LEFT)){
isLeft = true;
x -=3;
}
if(x <= 160 && CGame.isPressedKey(CGame.MKEY_RIGHT)){
isLeft = false;
x +=3;
}
if(CGame.isPressedKey(CGame.MKEY_UP)){
setNewStatus(PS_JUMP);
}
zhongLi();
break;
case PS_WALK:
move();
//zhongLi();
break;
case PS_JUMP:
if(x >= 80 && CGame.isPressedKey(CGame.MKEY_LEFT)){
isLeft = true;
x -=3;
}
if(x <= 160 && CGame.isPressedKey(CGame.MKEY_RIGHT)){
isLeft = false;
x +=3;
}
jump();
zhongLi();
break;
case PS_JUMP_LEFT:
move();
jump();
zhongLi();
break;
case PS_JUMP_RIGHT:
move();
jump();
zhongLi();
break;
case PS_FD:
if(getNowFrames() == fd.length - 1)
setNewStatus(PS_STAND);
break;
}
if(y + frame_h >= 300)
isLive = false;
}
void setNewStatus(int newPlayerStatus){
this.playerstatus = newPlayerStatus;
downSpeed = 0;
if(newPlayerStatus == PS_JUMP
|| newPlayerStatus == PS_JUMP_LEFT
|| newPlayerStatus == PS_JUMP_RIGHT ){
jumpSpeed = -16;
setFrame(jump);
}
if(newPlayerStatus == PS_STAND){
jumpSpeed = 0;
playercounter = 0;
setFrame(stand);
}
if(newPlayerStatus == PS_WALK){
jumpSpeed = 0;
setFrame(walk);
}
if(newPlayerStatus == PS_FD){
jumpSpeed = 0;
setFrame(fd);
}
}
void move() {
if(x >= 0 && x < SCREEN_WIDTH - frame_w)
x += isLeft ? -speed : speed;
if(x < 0)
x = 0;
if(x >= SCREEN_WIDTH - frame_w)
x = SCREEN_WIDTH - frame_w - 1;
}
private int jumpSpeed = -16;
private void jump() {
y += jumpSpeed;
System.out.println("js:" + jumpSpeed);
System.out.println("ds:" + downSpeed);
}
int zlg = 2;
int downSpeed = 0;
void zhongLi(){
if(!collisionWith(colMap)){
y += downSpeed;
downSpeed += zlg;
System.out.println("js:" + jumpSpeed);
System.out.println("ds:" + downSpeed);
}
if(collisionWith(colMap)){
y += dy;
downSpeed = 0;
setNewStatus(PS_STAND);
}
}
int dy = 0;
boolean collisionWith(CMap map){
int leftx = x + 7;
int lefty = y + frame_h;
int rightx = x + frame_w - 7;
int righty = lefty;
if(lefty >= 286)
return false;
if(downSpeed + jumpSpeed >= 0){
for(int i=0;i<=downSpeed + zlg + jumpSpeed;i++){
int hangShu1 = (lefty + i - map.y) / map.tileH;
int lieShu1 = (leftx + (isLeft ? -speed : speed) - map.x) / map.tileW;
int hangShu2 = (righty + i - map.y) / map.tileH;
int lieShu2 = (rightx + (isLeft ? -speed : speed) - map.x) / map.tileW;
if(map.mapdata[hangShu1][lieShu1] != 0
&& map.mapdata[hangShu1][lieShu1] != 22
&& map.mapdata[hangShu1][lieShu1] != 23){
dy = i;
return true;
}
if(map.mapdata[hangShu2][lieShu2] != 0
&& map.mapdata[hangShu2][lieShu2] != 22
&& map.mapdata[hangShu2][lieShu2] != 23){
dy = i;
return true;
}
}
}
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -