在XXX.model包里新建一个BaseModel用来让所有的实体来继承,再新建一个接口TouchAble
老实说,一开始老师这里这么写,我是没太理解的,后来才发现这样写太棒了!优点,写到后面我们自然就明白了。
接下里,我们来画seedflower(就是向日葵的卡片)。
先列出BaseModel
public class BaseModel {
private int locationX;
private int locationY;
private boolean isAlive;
public int getLocationX() {
return locationX;
}
public void setLocationX(int locationX) {
this.locationX = locationX;
}
public int getLocationY() {
return locationY;
}
public void setLocationY(int locationY) {
this.locationY = locationY;
}
public boolean isAlive() {
return isAlive;
}
public void setAlive(boolean isAlive) {
this.isAlive = isAlive;
}
public void drawself(Canvas canvas, Paint paint) {
}
public int getModelWidth(){
return 0;
}
}
3个参数,设置set,get
locationX,locationY,分别代表实体左上角的横纵坐标,isAlive是boolean型,用来判断实体是否应该出现
drawSelf方法就不说了,都懂的
getModelWidth方法主要是为之后的碰撞检测做铺垫,这边先不管
然后是,TouchAble接口,里面就写入一个方法
public interface TouchAble {
public boolean onTouch(MotionEvent event);
}
用来判断是否发生触碰事件
好,让我们开始画seedFlower吧。老样子,先配置好图片资源。
传入父类的所有参数,并配置好set,get方法。重写父类的drawSelf方法,以及实现接口的抽象方法onTouch
我们先画,触摸之后写。
初始化构造方法
public SeedFlower(int locationX, int locationY) {
this.locationX = locationX;
this.locationY = locationY;
isAlive = true;
}
配置好后,写drawSelf方法
public void drawself(Canvas canvas, Paint paint) {
if (isAlive) {
canvas.drawBitmap(Config.seed_flower, locationX, locationY, paint);
}
}
这里的locationX,locationY之前也提过了,是图片左上角的坐标
接下里就要在GameView里画出来了
这个时候,我们理一下画图分层以及触摸分层的概念。
画图层:后画上去的会覆盖掉先画上去的
触摸层:在上面的层会优先响应
那我们分一下层:
第一层:待安放状态的植物
第二层:种子
第三层:阳光
第四层:植物、僵尸,子弹
根据以上的内容,新建一个ArrayList<BaseModel> gameLayout2,在createElement方法里实例化
然后添加元素seedFlower和seedPea
gameLayout2 = new ArrayList<BaseModel>();
gameLayout2.add(new SeedFlower(Config.sunDisapperX+ Config.seedBank.getWidth() / 6, 0));
gameLayout2.add(new SeedPea(Config.sunDisapperX+ Config.seedBank.getWidth() / 6
<span style="white-space:pre"> </span>+ Config.seed_flower.getWidth() + 5, 0));
这里面的locationX和locationY我就不一一计算了,还是很