关于j2me手机游戏!

在j2me手机游戏中,人物向前走时,背景图片向后移动,可是人物已经走出手机屏幕了,背景还没有跟上,怎样设置能让背景图片跟上速度,人物不会出去屏幕?求指教,谢谢!!!... 在j2me手机游戏中,人物向前走时,背景图片向后移动,可是人物已经走出手机屏幕了,背景还没有跟上,怎样设置能让背景图片跟上速度,人物不会出去屏幕?求指教,谢谢!!! 展开
 我来答
是田明启
2011-08-01
知道答主
回答量:41
采纳率:0%
帮助的人:23.4万
展开全部
  这是一个滚屏问题,主要应用了LayerManager的setViewWindow()方法。设计思想如下:
  问题出在设置什么时候背景开始“跟”:不要设置人物到边沿时再“跟”,设置人物距离边沿还有 int start 长距离时开始“跟”(start=35比较人性化),直到把人物显示在中央才停止。下面是我的一个类,专门用来处理这个滚屏问题的,它是一个线程,你只要把你的LayerManager,地图层,人物,屏幕宽,屏幕高做为参数给它,然后启动它就可以了。

  package com.mhxy.util;

  import javax.microedition.lcdui.game.LayerManager;
  import javax.microedition.lcdui.game.TiledLayer;

  /**********************处理地图滚动的线程************************************/
  public class MapContor implements Runnable{
  private LayerManager lm;//图层管理器
  private TiledLayer map;
  private Zhujiao zhujiao;//游戏主角
  private int h;//屏幕水平宽度
  private int v;//屏幕垂直高度
  private int start=35;//主角距离屏幕start时开始滚屏
  private int x=0;//视窗坐标
  private int y=0;//视窗坐标
  private int map_speed=20;//地图滚动间隔时间数

  public MapContor(LayerManager lm,TiledLayer map,Zhujiao zhujiao,int width,int height){
  this.lm=lm;
  this.map=map;
  this.zhujiao=zhujiao;
  this.h=width;
  this.v=height;

  //设置可视窗口大小与坐标
  lm.setViewWindow(x,y, h, v);
  }
  public void run() {
  /****************主角距离屏幕小于length时开始滚屏**************************/
  while(true){
  //触发左滚
  if(zhujiao.getX()-this.x<this.start){
  boolean flag=true;
  while(flag){
  if(this.x>0){//可以左滚
  if(zhujiao.getX()-this.x<this.h>>1){//主角没有滚到中心
  lm.setViewWindow(x--, y, h, v);
  }else{
  flag=false;
  }
  }else{
  flag=false;
  }
  this.Mysleep();
  }
  }

  //触发上滚
  if(zhujiao.getY()-this.y<this.start){
  boolean flag=true;
  while(flag){
  if(this.y>0){//可以上滚
  if(zhujiao.getY()-this.y<this.v>>1){//主角没有滚到中心
  lm.setViewWindow(x, y--, h, v);
  }else{
  flag=false;
  }
  }else{
  flag=false;
  }
  this.Mysleep();
  }
  }

  //触发右滚
  if((this.x+this.h)-(zhujiao.getX()+zhujiao.getWidth())<this.start){
  boolean flag=true;
  while(flag){
  if(this.x+this.h<map.getCellWidth()){//可以右滚
  if(zhujiao.getX()-this.x>this.h>>1){//主角没有滚到中心
  lm.setViewWindow(x++, y, h, v);
  }else{
  flag=false;
  }
  }else{
  flag=false;
  }
  this.Mysleep();
  }
  }
  //触发下滚
  if((this.y+this.v)-(zhujiao.getY()+zhujiao.getHeight())<this.start){
  boolean flag=true;
  while(flag){
  if(this.y+this.v<map.getHeight()){//可以下滚
  if(zhujiao.getY()-this.y>this.v>>1){//主角没有滚到中心
  lm.setViewWindow(x, y++, h, v);
  }else{
  flag=false;
  }
  }else{
  flag=false;
  }
  this.Mysleep();
  }
  }

  ThreadUtil.sleep(1000);
  }
  }//end run
  public void Mysleep(){
  /**休息**/
  ThreadUtil.sleep(map_speed);
  }
  public void setX(int x){
  this.x=x;
  }
  public void setY(int y){
  this.y=y;
  }
  public int getX(){
  return this.x;
  }
  public int getY(){
  return this.y;
  }
  }
aa
2024-08-05 广告
在选择街机模拟器官方下载平台时,推荐考虑那些用户评价高、功能丰富且安全的软件。比如,一些知名的游戏平台或应用商店中提供的官方街机模拟器,通常都能保证软件的稳定性和安全性。这些平台会有严格的审核机制,确保上传的软件无病毒、无恶意代码,并且提供... 点击进入详情页
本回答由aa提供
anyemanbu
2011-07-29
知道答主
回答量:19
采纳率:0%
帮助的人:14.2万
展开全部
e
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式