前提及要:
因已完成大部分功能(畫線、墨水、球運動軌跡、得分機制...)
欲精簡程式碼以便套用在每個關卡上,卻卡住了
1.使用自訂函式分頁:return的回傳值只能有一個
2.使用Class物件,出現動態、靜態模式的問題.....
求助老師--------
刪掉重頭再來-用
Class{ArrayList}物件裡有鏈結串列
線class 裡面有好多點
+
ArrayList<class>好多個物件串成鏈結串列
好多條線
1.物件、陣列
1-1.陣列:
PVector pt; //pt是一個向量
PVector [ ] pts; //pts是一個放向量的矩陣
pts=new PVector[10]; //new方法:創建一個物件pts 是 用來放向量、大小為10的矩陣
pts[i]=new PVector( random(200),random(200) ); //創一個隨機的座標放到矩陣裡
1-2.物件:定義>宣告>創造new
定義物件類型
物件包含{
變數
定義函式
}
--------------- 定義好之後,如何使用class? ---------------
宣告
Line line;
new方法:建立物件實體
line = new Line( );
在每一個節點裡存到下一個節點的指標,
不需要事先知道資料大小 ex. 畫線不知道要多少個點
宣告
ArrayList<資料型態>名稱;
2-1.畫圖用的物件Curve:
先定義一個物件Curve,專門用來畫線、儲存向量(座標點)
class Curve{
ArrayList<PVector>pts; // pts是放向量的鏈結串列
Curve( ){ ///在class面呼叫自己 >>建構子:一開始就會做的事
pts=new ArrayList<PVector>(); //一開始先 創建向量pts
}
void draw(){ //畫線用的函式
for(int i=0;i<pts.size()-1;i++){
line(pts.get(i).x,pts.get(i).t,pts.get(i+1).x,pts.get(i+1).y);
//第i個與i+1個連成線
}
}
void addPoint(float x,float y){ ///儲存向量的方法
PVector pt=new PVector(x,y); //創建一個向量pt(x,y)
pts.add(pt); //存入pts裡
}
}
宣告
Curve curve;
new方法 創造物件
curve=new Curve();
2-2.當滑鼠拖曳時畫線:
void mouseDragged(){
curve.addPoint( mouseX, mouseY); //把滑鼠點存入curve裡
}
void draw(){
curve.draw(); //把curve畫出來
}
curve是一個Curve物件
Curve裡有{
放向量的鏈結串鍊pts
畫線的方法
把向量pt存入pts的方法
}
3-1.把線分段
為了把線分段,意即需要好幾段curve、不知道要多少段
------------ 如何創造數個curve?? ------------
使用鏈結串列
ArrayList<Curve>curves; //curves是一個"放很多Curve的鏈結串列"
把每一段都畫出來
for(Curve c:curves){ //for-each循環
///設置c為第一個curves、第二、第三個...從頭跑到尾
c.draw();//畫線//對於每一個線段curve都把他畫出來
}
按下滑鼠時分段
void mousePressed(){ //按下滑鼠時,分段
curve =new Curve(); //創一個新的curve物件
curves.add(curve); ///把線段加入curves裡
///每條線都收在curves鏈結串列之中
}
拖曳滑鼠時 秀出每條線段有多少點
println(curves.size(),"--",curve.pts.size() ); //輸出一行 就不用換行了
4-1.墨水量
每次結束線段//釋放滑鼠時,累加線段點的總數
points_size+=curve.pts.size();
設定開關
boolean playing=false;
在所有畫線的功能前 加上條件 (Playing&&有墨水)
定義一個物件Noline{
顯示不能畫的區域//秀出矩形
規定畫線&不能畫線
}
NoLine zone;
zone=new NoLine();
鏈結串列:指向下一個,
若正著刪、要刪除第一個需要先跑到最後一個(因為最後一個指向第一個)
每刪除一個;整串都要往前位移一次
清空鏈結串列:倒著刪除
curves是有很多curve的鏈結串列;
curve是有很多向量(pts)的鏈結串列;
>>>雙層迴圈、由裡面刪到外面、倒著刪除
沒有留言:
張貼留言