logo

Chatbox|Admin nhận làm wap/web, giá cả thương lượng... Thông tin admin tại mỗi bài viết.
Home · Bang hội ·
* Đăng Nhập hoặc Đăng Kí
để sử dụng hết chức năng của diễn đàn.
Hi, Khách!
HomeBang hội » Thủ thuật » Nokia s40 » » Xem bài viết
Xuống dưới »
avatar by Pham_loi Pham_loi
Chức vụ:
08:48:44, 29-07-2015

load map từ file nguồn– function class
để có thể dễ dàng hành động và quản lí các máp hơn ta sẽ sử dụng một class tự tạo, va chức năng của nó là tổng hợp một map từ một text file và một hình ảnh nguồn làm gạch.
tôi sử dụng phần mềm tiled-qt để vẽ map cho nên tôi chỉ viết code để chuyển file map mà nó tạo ra thành nguồn mà tôi có thể sử dụng:
các bạn có thể down tiled-qt tại đây
tiled-qt-0.5.1-win32.zip

nội dung của đoạn code như sau:
tomap.java
<?php
import javax
.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class 
tomap
{
TiledLayer totile(String fn,String im)
{
int lw,lh,tw,th;
Image img=null;
InputStream is=getClass().getResourceAsStream(fn);
try{ 
lw=is.read();
lh=(int)is.read();
tw=(int)is.read();
th=(int)is.read();
try{
img=Image.createImage(im);}catch(Exception e){}
TiledLayer tl=new TiledLayer(lw,lh,img,tw,th);
for(
int i=0;i<lw*lh;i++){
int c=i%lw;
int r=(i-c)/lh;
tl.setCell(c,r,is.read());}
img=null;
return 
tl;
}catch(
Exception e){return null;}
}
}
?>

Copy code

khi sử dụng đơn giản ta chỉ cần gọi một biến với kiểu là tên class này(tomap) sau đó cho thực hiện function totile(tên txt file,ten ảnh nguồn)
như ví dụ sau:
<?php
tomap cm
=new tomap();
TiledLayer map=cm.totile("1.txt","/t.png");
?>

Copy code

map.tmx
ví dụ đây là file map do tiled-qt tạo ra:map.tmx
các bạn vào trang http://holyeyed.99k.org/function/tombd.php để chuyển lấy file map cho class trên có thể đọc được
n.mbd
và đây là file sau khi chuyển:n.mbd
ví dụ ta load map trên trong file map.java của vd project như sau:
map.java
<?php
import javax
.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class 
map extends GameCanvas implements Runnable
{
TiledLayer m;
tomap cm=new tomap();
add nv=new add();
private 
vd main;
private 
Graphics g=getGraphics();
private 
boolean play=true,say=false;
private 
int map=0,f=0,x=0,y=0,sx,sy;
Stringmname={"n.mbd"};
int w=getWidth();
int h=getHeight();
public 
map(vd main){
super(false);
this.main=main;
}
void start(){
setFullScreenMode(true);
play=true;
Thread t=new Thread(this);
t.start();}
public 
void run(){
//int i=0,j=0;
switch(map)
{
case 
0:
{
g.setColor(0x0);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0xa09040);
g.drawString("please wait…",w/2,h/2,g.HCENTER|g.BASELINE);
flushGraphics();
m=cm.totile(mname[map,"/t.png");
}
break;
case 
2:
{}
//do something for another map
break;
case 
3:
{}
// do another map
break;
}
while(
play){
g.setColor(0x0);
g.fillRect(0,0,getWidth(),getHeight());
input();
m.setPosition(x,y);
m.paint(g);g.fillRect(0,0,60,40);
g.setColor(0xdd0000);
g.drawString(x+" "+y,0,0,g.TOP|g.LEFT);
nv.addsprite(g,"/s.png",f,(w-32)/2,(h-32)/2,32,32);
flushGraphics();
}
}
void input()
{
int k=getKeyStates();
switch(
k){
case 
64:
y-=4;
break;
case 
2:
y+=4;
break;
case 
32:
x-=4;
break;
case 
4:
x+=4;
break;
case 
256:
{
play=false;
main.destroyApp(true);}
break; }
}
}
?>

Copy code

. trong trường hợp này, nếu bạn muốn xét điểm chạm giữa nhân vật và map thì không dùng cách của bài trước nữa, bởi vì ở đây không tồn tại một array bản đồ cho bạn xét. thế nhưng trên tiledllayer cung cấp một function giúp bạn có thể phát hiện xem một tọa độ điểm đang nằm trên tile nào.
[bint tl.getCell(col, row);[\b
như vậy chỉ cần có tọa độ của nhân vật là bạn có thể dễ dàng xét xem nó đang thuộc tile nào mà xét điểm chạm.
[download
đây là link tilededitor
http://sourceforge.net/projects/tiled/files/tiled-qt/0.7.1/tiled-0.7.1-win32-setup.exe
cách sử dụng:
bạn tạo một file mới điền các thông số của map
vào edit, preference , chọn save data là CSV, bỏ chọn include dtd referens in saved maps
vào map, new tiledset để chọn ảnh làm gạch cho map mới .
sau đó thì upload file map lên trang này để đổi lấy file .mbd


Chỉnh sửa lúc 2016-07-09 14:26 bởi Pham_loi
Like: 0

Trực Tuyến: Khách: 1
Diễn đàn teen Việt Nam
CopyRight 2014

XtGem Forum catalog