Bridge 的目的在於認兩個類型的類別彼此之間不要有依賴的關係,而是都依賴介面。
如Render和Shape之間的關係。
Render有VectorRender及ScaleRender
Shape有Circle及Rectangle及...
如果以 inheritance 的方式來產生以VectorRender畫的Circle、以ScaleRender畫的Circle,那這樣類別的數量就會一直增加。
所以,我們讓Circle有一個IRender。
而IRender提供很多基本的方法,讓Circle可以透過這些方法畫出來。
因此,我們可以在建構Circle的時候,把真正的Render再放進去。
若是有新的Render,也都不用修改Circle。
KaLiKaLi塊塊唸
程式設計 電玩遊戲 養兒育女 該是來挪出時間,說說KaLiKaLi的事
2020年4月12日 星期日
2020年4月5日 星期日
Cheat Engine Step 7 Tutorial 中文翻譯
- Code Injection 可以讓你在Process中植入一段程式碼並且執行它。
- 在這個練習中,你會有一個生命值並且有一個按鈕。每次按一下按鈕會減少生命值1。你的任務就是使用Code Injection讓每次按按鈕增加生命值2。
1. 找到生命值的位置,並且找到有寫在寫入這個位置
2. 在disassemble中找到減少生命值的code,並且開啟 auto assembler window (ctrl +a)
3. 點擊template找到code injection並且給它減少生命值的位置,之後會自動產生可以讓你使用的組合碼
注意:
1. 在windows 2000 以前,你必需要找到一個記憶體區塊來放置 code ,但新的cpu已經不需要這樣做。
2. 在template中看到的 "place your code here" 就是放置你修改的code的地方
3. 有一個有用的指令碼為 "ADD instruction",以下是幾個範例
3-1. ADD [00901234],9 代表要增加9在這個00901234這個記憶體位置
3-2. ADD [ESP+4],9 代表要在ESP+4 這個記憶體位置的值再加上9
4. 你應該要刪掉原本的code,不然你需要一次新增生命值3。因為原本減1,再加上inject code + 2。所以總共 + 3
- 在這個練習中,你會有一個生命值並且有一個按鈕。每次按一下按鈕會減少生命值1。你的任務就是使用Code Injection讓每次按按鈕增加生命值2。
1. 找到生命值的位置,並且找到有寫在寫入這個位置
2. 在disassemble中找到減少生命值的code,並且開啟 auto assembler window (ctrl +a)
3. 點擊template找到code injection並且給它減少生命值的位置,之後會自動產生可以讓你使用的組合碼
注意:
1. 在windows 2000 以前,你必需要找到一個記憶體區塊來放置 code ,但新的cpu已經不需要這樣做。
2. 在template中看到的 "place your code here" 就是放置你修改的code的地方
3. 有一個有用的指令碼為 "ADD instruction",以下是幾個範例
3-1. ADD [00901234],9 代表要增加9在這個00901234這個記憶體位置
3-2. ADD [ESP+4],9 代表要在ESP+4 這個記憶體位置的值再加上9
4. 你應該要刪掉原本的code,不然你需要一次新增生命值3。因為原本減1,再加上inject code + 2。所以總共 + 3
2019年9月2日 星期一
屬性值動態改變 (動畫)
屬性值動態改變 (動畫)
屬性值可以透過動態的功能做到動態改變。
改變值的元件依照值的類型而有所不同,如果是一般的數值,就可以使用
DoubleAnimation
DoubleAnimation
操作一個值 (Storyboard.TargetProperty),給予開始值(From)和結束值(To),會在指定的時間週期(Duration)內,將值從開始值變化到結束值
<DoubleAnimation Storyboard.TargetProperty="StrokeThickness"
From="0" To="2" Duration="0:0:0.5"
AutoReverse="True" RepeatBehavior="Forever"
/>
當變化完成後,若想倒轉回到原本的值,可以下AutoReverse。若想要重覆此流程,可以下RepeatBehavior。
RepeatBehavior有以下幾種用法
- Forever 不斷重覆
- 0:0:4 重覆直到4秒
- 2x 重覆兩次
- 0.5x 重覆半次
在DoubleAnimation中,要指定變化的屬性並不是透過DoubleAnimation中的屬性,而是要使用附加屬性 Storyboard.TargetProperty。因此,我們可以知道在DoubleAnimation的外層一定包著Storyboard
Storyboard
Storyboard用來決定
- 要改變的屬性
- 擁有此屬性的對像
- 讓動畫前進、停止、暫停等動作
Storyboard並不直接設定改變的屬性及對像,相反的是透過附加屬性在子系的xxxAnimation中去指定
觸發動畫的方法
- 直接在控制項的Triggers中,新增EventTrigger
-
由於EventTrigger是看事件的,所以直接使用 < BeginStoryboard >
<Rectangle Fill="#FFF4F4F5" Height="100" Margin="215,186,0,0" Width="100"> <Rectangle.Triggers> <EventTrigger RoutedEvent="Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1.0" To="0" Duration="0:0:2" AutoReverse="True" RepeatBehavior="Forever"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Rectangle.Triggers>
-
- 在控制項中的Triggers中,新增Trigger
- 由於Trigger在設定的時候,就要指定值是什麼的時候才要觸發Trigger。所以會有值被修改造成觸發及值被修改後再次等待觸發兩種狀況。
這兩種狀況發生時,要作動的內容分別寫在
<Trigger.EnterActions>
及
<Trigger.ExitActions> - Trigger只能設在Style中的Triggers,不能設在控制項中的Triggers。所以要在控制項中的Resource中設定Style來設定此Trigger
< Rectangle Stroke="Black" Fill="#FFF4F4F5" Height="100" Margin="74,178,0,0" Width="100">
< Rectangle.Resources>
< Style TargetType="Rectangle">
< Style.Triggers>
< Trigger Property="IsMouseOver" Value="True">
< Trigger.EnterActions>
< BeginStoryboard>
< Storyboard>
< DoubleAnimation Storyboard.TargetProperty="StrokeThickness" From="0" To="4" Duration="0:0:1"/>
< /Storyboard>
< /BeginStoryboard>
< /Trigger.EnterActions>
< /Trigger>
< /Style.Triggers>
< /Style>
< /Rectangle.Resources>
< /Rectangle>
2019年8月29日 星期四
自定義控制項的 Background
自定義控制項的Background
在WPF的Control中, Background需要一個Brush。而Brush有以下幾種- Brush
- SolidColorBrush
- LinearGradientBrush
- RadialGradientBrush
- DrawingBrush
- VisualBrush
前四種是單純只有顏色變化的Brush,對於形狀沒有改變。
而最後兩種,是會改變要上色的形狀。
DrawingBrush
DrawingBrush可以自行定義形狀。DrawingBrush可以吃一個Drawing,透過組合多個Drawing,就可以產生我們要的形狀。
Drawing有以下的分類
- GeometryDrawing – 繪製圖形。
- LineGeometry - 畫線
- RectangeGeometry - 畫方形
- EllipseGeometry - 畫圓
- PathGeometry - 畫任意路徑
- ImageDrawing – 繪製影像。
- GlyphRunDrawing – 繪製的文字。
- VideoDrawing – 播放音訊或視訊檔。
- DrawingGroup – 繪製其他繪圖。 您可以使用繪圖群組,來將其他繪圖結合為單一複合繪圖。
GeometryDrawing除了要設定圖案外,還要設定外框的顏色、粗細以及要填滿的顏色。
GeometryDrawing設定好了,再設定給DrawingBrush,而DrawingBrush再設定給Background就大功告成。
順序如下
- Background -> DrawingBrush
- DrawingBrush -> GeometryDrawing
- GeometryDrawing -> CombinedGeometry
- CombinedGeometry -> RectangeGeometry, ElipseGeometry
2019年8月28日 星期三
訂閱:
意見 (Atom)

