如何高效的學習,這才是我們最值得去學習的。
關於文字的繪製以及特效,andengine demo中給出了5種文字繪製例子,在此,我提煉出其中的三種,自己寫了一個小demo,當明白這個後,剩下的就都會明白了。
先上:
該demo中定義了三種字型,第一種就是最上面那個為預設的黑體;第二中為自訂的一種字型,字型樣式可以下載;第三種是為普通的字型描邊。
在這裡還是先了一些特效,從透明到不透明,然後再旋轉。關於這些字型和特效的控制請看如下代碼:
整體代碼結構和以前一樣,這裡我只給出關鍵性的代碼:
onLoadResources()方法:
public void onLoadResources() {this.mFontTexture = new Texture(256, 256, TextureOptions.BILINEAR_PREMULTIPLYALPHA);this.mDroidFontTexture = new Texture(256, 256, TextureOptions.BILINEAR_PREMULTIPLYALPHA);this.mStrokeFontTexture = new Texture(256, 256, TextureOptions.BILINEAR_PREMULTIPLYALPHA);//定義預設字型,其中的參數:第一個為上面定義的紋理,第二個為字型樣式,第三個為字型大小,第四個為是否消鋸齒,第五個為顏色this.mFont = new Font(this.mFontTexture, Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 32, true, Color.BLACK);fontList.add(this.mFont);//自訂的字型,其中的參數:第一個為上面定義的紋理,第二個為本context,第三個為字型的路徑,第四個為字型的大小,第五個為是否消鋸齒,第六個為顏色this.iFont = FontFactory.createFromAsset(this.mDroidFontTexture, this, "Droid.ttf", 32, true, Color.BLACK);fontList.add(this.iFont);//備忘1//定義字型的描邊,其中的參數:第一個參數為上面定義的紋理,第二個參數為字型樣式,第三個參數為字型的大小,第四個參數為是否消鋸齒,第五個參數為字型顏色,第六個參數為字型邊的寬度,第七個參數為秒邊的顏色this.mStrokeFont = new StrokeFont(this.mStrokeFontTexture, Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 32, true, Color.BLACK, 2, Color.WHITE);fontList.add(this.mStrokeFont);//載入三種紋理this.mEngine.getTextureManager().loadTextures(this.mFontTexture,this.mDroidFontTexture,this.mStrokeFontTexture);//載入三種字型this.mEngine.getFontManager().loadFonts(this.mFont,this.iFont,this.mStrokeFont);}
onLoadScene()方法:
public Scene onLoadScene() {this.mEngine.registerUpdateHandler(new FPSLogger());final Scene scene = new Scene(1);scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));for (int i = 0; i < fontList.size(); i++) {TickerText text = new TickerText(50, (i+1)*100, fontList.get(i),"大家好,這裡是duancanmeng的部落格!",HorizontalAlign.CENTER,5);text.addShapeModifier(new SequenceShapeModifier(new ParallelShapeModifier(new AlphaModifier(10, 0.0f, 1.0f),new ScaleModifier(10, 0.5f, 1.0f)),new RotationModifier(5, 0, 360)));//備忘2text.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);//這裡前面幾篇都講過scene.getTopLayer().addEntity(text);}return scene;}
備忘1:該處的字型樣式可以到http://download.csdn.net/detail/duancanmeng/4065568下載,裡面提供了五種不同的效果,注意:字型樣式檔案放在assets的檔案夾下。
備忘2:關於TickerText構造方法中的參數,前面的都好理解,最後兩個我解釋一下:倒數第二個是表示字型是置中對齊,倒數第一個是表示一秒鐘顯示的字元的個數,也就是繪製文字的速度。可以看到特效是從代碼text.addShapeModifier的時候載入進來的,SequenceShapeModifier是表示裡面的所有動作按照先後順序執行,ParallelShapeModifier表示裡面的所有動作同時執行,而這些所有的Modifier中的參數,第一個是代表執行的時間,第二個是執行前的狀態,第三個是執行後的狀態。例如:new
AlphaModifier(10,0.0f,1.0f)代表10秒鐘之內文字從透明的變成不透明的。