这是我自己根据《捕鱼达人》,用SurfaceView封装的一个DEMO,把点击屏幕大炮发射子弹,捕抓鱼的一些基本功能都已经实现,只是封装的可能不太好,借此与大家分亨一下,希望请大神们多指点一下。先看效果图:
JAVA代码的写法:
//点击了捕鱼区域,发射子弹
if(isDown){
isDown = false;
//发射子弹的间隔
long end = System.currentTimeMillis();
if(end -start_artilley<1500)return;
start_artilley = end;
//正切区域
float x = downX-mWidth/2;//在屏幕的一半范围内(把屏幕分成两块0,mWidth/2)
//高度区域
// float y = downY-(mHeight-artilley.getBitmap().getHeight()/2);
float y = downY-artilley.getY();//正切点
//根据点,测试正切的角
//弧度转换成角度
float angle = (float)Math.toDegrees(Math.atan2(x, -y));
//旋转角度的区间
if(angle>=-95&&angle<=95)
artilley.setAngle(angle);
//增加子弹
Bitmap bit = BitmapManager.getInstance().bullet[artilley.getCol()];
float x1 = artilley.getX()+(artilley.getW()-bit.getWidth())/2;
float y1 = artilley.getY()+(artilley.geth()-bit.getHeight())/2;
Bullet b = new Bullet(x1,y1,x1+bit.getWidth(),y1+bit.getHeight(),bit);
b.setAngle(artilley.getAngle());
bullets.add(b);
//增加渔网
bit = BitmapManager.getInstance().net[artilley.getCol()];
int rows = 5,cols=1;//行、列
float w = bit.getWidth();//宽
float h = bit.getHeight()/rows;//高
TiledSprite net = new TiledSprite(b.getX()+(b.getWidth()-w)/2,
b.getY(),
b.getX()+(b.getWidth()-w)/2+bit.getWidth(),
b.getY()+h, bit, rows, cols);
net.setLoop(false);//循环播放帧动画
net.setAnim(true);//开启帧动画
net.setStartRowAndEndRow(0, rows-1);//绘制行帧动画的帧数
net.setFlag(true);//设置绘制行帧动画,还是绘制列动画
b.setNetPosition(downX, downY);//渔网的位置
b.setNet(net);//放入子弹
net = null;
bit = null;
b = null;
bit = null;
return;
}
更新子弹的位置:
//左边正常
double radian = Math.toRadians(Math.abs(b.getAngle()));
float x;
if(b.getAngle()>0)//左边屏幕
x= (float) Math.sin(radian)*-BULLET_SPEED;
else//右边屏幕
x= (float) Math.sin(radian)*BULLET_SPEED;
float y = (float) Math.cos(radian)*BULLET_SPEED;
cocos2d-x代码设置大炮的角度:
源码地址 :http://download.csdn.net/detail/util_c/6874637