欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Matrix的set,pre,post调用顺序详解

程序员文章站 2022-08-02 14:22:15
matrix调用一系列set,pre,post方法时,可视为将这些方法插入到一个队列。当然,按照队列中从头至尾的顺序调用执行。 其中pre表示在队头插入一个方法,post...

matrix调用一系列set,pre,post方法时,可视为将这些方法插入到一个队列。当然,按照队列中从头至尾的顺序调用执行。

其中pre表示在队头插入一个方法,post表示在队尾插入一个方法。而set表示把当前队列清空,并且总是位于队列的最中间位置。当执行了一次set后:pre方法总是插入到set前部的队列的最前面,post方法总是插入到set后部的队列的最后面。

例一:

matrix m = new matrix();
m.setrotate(45); 
m.settranslate(80, 80);

只有m.settranslate(80, 80)有效,因为m.setrotate(45);被清除.

例子二:

matrix m = new matrix();
m.settranslate(80, 80);
m.postrotate(45);

先执行m.settranslate(80, 80);后执行m.postrotate(45);

例子三:

matrix m = new matrix();
m.settranslate(80, 80);
m.prerotate(45);

先执行m.settranslate(80, 80);后执行m.prerotate(45);

例子四:

matrix m = new matrix();
m.prescale(2f,2f);  
m.pretranslate(50f, 20f);  
m.postscale(0.2f, 0.5f);  
m.posttranslate(20f, 20f); 

执行顺序:m.pretranslate(50f, 20f)-->m.prescale(2f,2f)-->m.postscale(0.2f, 0.5f)-->m.posttranslate(20f, 20f)

注意:m.pretranslate(50f, 20f)比m.prescale(2f,2f)先执行,因为它查到了队列的最前端.

例子五:

matrix m = new matrix();
m.posttranslate(20, 20);  
m.prescale(0.2f, 0.5f);
m.setscale(0.8f, 0.8f);  
m.postscale(3f, 3f);
m.pretranslate(0.5f, 0.5f);

执行顺序:m.pretranslate(0.5f, 0.5f)-->m.setscale(0.8f, 0.8f)-->m.postscale(3f, 3f)

注意:m.setscale(0.8f, 0.8f)清除了前面的m.posttranslate(20, 20)和m.prescale(0.2f, 0.5f);

以上这篇matrix的set,pre,post调用顺序详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。