家教机 点读机 校园内外 亲子部落 礼物兑换
您的位置: 论坛/校园内外/帖子详情
Hi,您好!|步步高消息(0)
楼主

标题:

[原创]p类函数库的实际运用,由浅入深,深入浅出的实例讲解

3跳转到确定

 我给出了p类函数  使用就是你们个人的事了
一下我给出的大多数都是和绘图有关的运用!~~~
[原创][推荐][注意]个人集合贴,找东西就在这里找了.一直持续更新![最后发表:9-23]
有什么不懂的就去这个里面找找相关内容

这次的实例是慢慢从基础讲的,很好理解!!!!!

只发这一次全部代码
[quote]CONST POINT_DATA_LENGTH = 800 '' 也就是100*2*4
CONST POINT_DELETE_SIGN = 999

dim p,p1,p2,i
dim a!
dim page
setlcd(240,320)
page = createpage()

DECLARE FUNCTION PINIT()
DECLARE FUNCTION newPoint(f_x,f_y)
DECLARE FUNCTION deletePoint(f_p)
DECLARE FUNCTION FINDPP()
DECLARE FUNCTION PX(F_P)
DECLARE FUNCTION PY(F_P)
DECLARE FUNCTION POFFSET(F_P,F_X,F_Y)
DECLARE FUNCTION PRESET(F_P,F_X,F_Y)
DECLARE FUNCTION PPLOAR(F_LEN,F_ANGLE!)
DECLARE FUNCTION PDISTANCE(F_PT,F_PB)
DECLARE FUNCTION PINTERPOLATE(F_PT,F_PB,T!)
'DECLARE FUNCTION PNORMALIZE()
DECLARE FUNCTION PTOSTRING(F_P)
DECLARE FUNCTION PCLONE(F_P)

FUNCTION PINIT()
DIM shared PP
DIM shared POINT_DATA(100,2)

VASM("LD INT [VINT_PP],VINT_POINT_DATA")'''VINT_POINT_DATA用来存储是否每次都要find,也就是说当循环一圈以后都用find。用find
''为0 不用为1
VASM("LD INT [VINT_POINT_DATA],1")
VASM("CAL INT ADD [VINT_PP],12")

END FUNCTION

FUNCTION FINDPP()
DIM shared static_r
dim DCIRCLE ''要是做完了一个循环要是没找到就不找了 直接设置pp的值为 point_data的地址。
''''''''''''''''没办法 我不可能给你来个严重的错吧!
DIM SHARED FINAL_ADDRESS

FINAL_ADDRESS = POINT_DELETE_SIGN

VASM("CAL INT ADD [VINT_FINAL_ADDRESS],VINT_POINT_DATA")'''找出数据库的最大地址

VASM("LD INT [vint_static_r],[VINT_POINT_DATA]")
IF( ( (PP + 8) < FINAL_AdDRESS ) AND static_r )THEN

VASM("JMP FINT_FINDPP_EXIT")'''在数据库内便退出此函数,指针超出数据库时回到开始并查找,或者完了一圈的时候都是用查找的模式

END IF
VASM("LD INT [VINT_POINT_DATA],0")
DCIRCLE = 1
VASM("LD INT [VINT_PP],VINT_POINT_DATA")
VASM("CAL INT ADD [VINT_PP],4")'''设置为从开始循环

WHILE( (static_r = POINT_DELETE_SIGN) AND DCIRCLE)
vasm("ld int r2,[VINT_PP]")
vasm("ld int [vint_static_R],[r2]")

vasm("CAL int ADD [VINT_PP],4")

IF(PP + 8 > FINAL_ADDRESS)THEN
DCIRCLE = 0
VASM("LD INT [VINT_PP],VINT_POINT_DATA")
END IF

WEND

vasm("CAL int sub [VINT_PP],4")

END FUNCTION

FUNCTION NEWPOINT(F_X,F_Y)
'FINDPP()
VASM("CALL FINT_FINDPP")

VASM("LD INT r1,[VINT_PP]")

VASM("LD INT [rb],r1")'''''先设置返回的地址


VASM("LD int r0,rb")
VASM("CAL int ADD r0,16")
VASM("LD int r2,[r0]")
VASM("LD INT [r1],r2")''''''''存入X

VASM("CAL INT ADD [VINT_PP],4")'''''增加指针

VASM("LD INT r1,[VINT_PP]")
VASM("CAL int SUB r0,4")
VASM("LD int r2,[r0]")
VASM("LD INT [r1],r2")''''''''存入Y

VASM("CAL INT ADD [VINT_PP],4") '''''''最后依然指向空地址

END FUNCTION

FUNCTION DELETEPOINT(F_P)
DIM SHARED P_D_S
P_D_S = POINT_DELETE_SIGN

VASM("LD int r0,rb")
VASM("CAL int ADD r0,12")
VASM("LD int r2,[r0]")
VASM("LD INT [r2],[VINT_P_D_S]")'''''''从设x为删除点的特点值

END FUNCTION

FUNCTION PX(F_P)

VASM("LD int r0,rb")
VASM("CAL int ADD r0,12")
VASM("LD int r2,[r0]")
VASM("LD INT [rb],[r2]")

END FUNCTION

FUNCTION PY(F_P)

VASM("LD INT r0,rb")
VASM("CAL INT ADD r0,12")
VASM("LD INT r2,[r0]")
VASM("CAL INT ADD r2,4")
VASM("LD INT [rb],[r2]")

END FUNCTION

FUNCTION POFFSET(F_P,F_X,F_Y)

VASM("LD int r0,rb")
VASM("CAL int ADD r0,20")
VASM("LD int r2,[r0]")
VASM("LD INT [rb],r2")'''''''''返回值
VASM("CAL int SUB r0,4")

VASM("LD INT r1,[r0]")
VASM("CAL INT ADD [r2],r1")
VASM("CAL INT ADD r2,4")
VASM("CAL INT SUB r0,4")
VASM("LD INT r1,[r0]")
VASM("CAL INT ADD [r2],r1")


END FUNCTION

FUNCTION PRESET(F_P,F_X,F_Y)

VASM("LD int r0,rb")
VASM("CAL int ADD r0,20")
VASM("LD int r2,[r0]")
VASM("LD INT [rb],r2")'''''''''返回值
VASM("CAL int SUB r0,4")

VASM("LD INT r1,[r0]")
VASM("LD INT [r2],r1") '''|
VASM("CAL INT ADD r2,4")
VASM("CAL INT SUB r0,4")
VASM("LD INT r1,[r0]")
VASM("LD INT [r2],r1")''''|只是把做加运算换成了赋值运算


END FUNCTION
'''''''''''''''''''''''''''''''''''''''''''''''''''
FUNCTION PPLOAR(F_LEN,F_ANGLE!)

VASM("LD int r0,rb")
VASM("CAL int ADD r0,16")
VASM("LD int r1,[r0]")
VASM("CAL int sub r0,4")
VASM("LD int r2,[r0]") ''''用r3来保存角度方便in的调用
VASM("LD INT r3,r1")
VASM("IN r1,1")

VASM("LD INT r3,r2")

''1016003124 ; float value: 0.017453
VASM("CAL float MUL r3,1016003124")
VASM("IN r0,17")

VASM("CAL FLOAT MUL r0,r1")



VASM("IN r3,16")
VASM("CAL FLOAT MUL r3,r1")

VASM("IN r1,0")
VASM("LD INT r3,r0")
VASM("IN r0,0")
VASM("PUSH r0")
VASM("PUSH r1")
VASM("CALL FINT_NEWPOINT")
VASM("LD INT [rb],r3")
END FUNCTION

FUNCTION PDISTANCE(F_PT,F_PB)

VASM("LD int r0,rb")
VASM("CAL int ADD r0,16")
VASM("LD int r1,[r0]")

VASM("CAL int sub r0,4")
VASM("LD int r2,[r0]")

VASM("LD INT r0,[r1]")
VASM("LD INT r3,[r2]")

VASM("CAL INT SUB r0,r3")
VASM("CAL INT MUL r0,r0")

VASM("CAL int ADD r1,4")
VASM("CAL int ADD r2,4")

VASM("LD INT r1,[r1]")
VASM("CAL INT SUB r1,[r2]")
VASM("CAL INT MUL r1,r1")
VASM("CAL int ADD r1,r0")
''''''''''
VASM("LD INT r3,r1")
VASM("IN r3,1")
VASM("IN r3,19")
VASM("IN r3,0")
VASM("LD INT [rb],r3")
END FUNCTION

FUNCTION PINTERPOLATE(F_PT,F_PB,T!)
DIM SHARED F_T!
F_T! = T!

VASM("LD int r0,rb")
VASM("CAL int ADD r0,20")
VASM("LD int r1,[r0]")
VASM("CAL int sub r0,4")
VASM("LD int r2,[r0]")

VASM("LD INT r0,[r1]")
VASM("CAL INT SUB r0,[r2]")

VASM("LD INT r3,r0")
VASM("IN r3,1")
VASM("CAL FLOAT MUL r3,[VFLO_F_T]")
VASM("IN r0,0")
VASM("CAL INT ADD r0,[r2]")

VASM("CAL INT ADD r1,4")
VASM("CAL INT ADD r2,4")

VASM("LD INT r3,[r1]")
VASM("CAL INT SUB r3,[r2]")

'VASM("LD INT r3,r1")
VASM("IN r3,1")
VASM("CAL FLOAT MUL r3,[VFLO_F_T]")
VASM("IN r3,0")
VASM("CAL INT ADD r3,[r2]")

VASM("PUSH r0")
VASM("PUSH r3")
VASM("CALL FINT_NEWPOINT")
VASM("LD INT [rb],r3")

END FUNCTION

FUNCTION PTOSTRING(F_P)
DIM SHARED P_X
DIM SHARED P_Y
P_X = PX(F_P)
P_Y = PY(F_P)

vasm("out 4,88")
vasm("out 4,58")
VASM("OUT 3,[VINT_P_X]")
vasm("out 4,44")
vasm("out 4,89")
vasm("out 4,58")
VASM("OUT 3,[VINT_P_Y]")

END FUNCTION

FUNCTION PCLONE(F_P)
PCLONE = NEWPOINT( PX(F_P),PY(F_P))
END FUNCTION

PINIT()'''''''''''''''''''''''''初始化
p = newpoint(120,160)
while(a! < 360)
p1 = PPLOAR(100,a!)
p1 = poffset(p1,120,160)

pixel(-1,px(p1),py(p1),&hffffff)

deletepoint(p1)
a! = a! +0.5
wend
[/quote]
图示 最基本的画圆:
[upload=jpg,1.jpg]UploadFile/2010-9/20109240114664126.jpg[/upload]

下面的仅仅修改了主要代码:
[quote]PINIT()
p = newpoint(120,160)
while(a! < 120)
p1 = PPLOAR(100,a!)
p1 = poffset(p1,120,160)

pixel(-1,px(p1),py(p1),&hffffff)

deletepoint(p1)
a! = a! +0.5
wend[/quote]
即是画弧:[upload=jpg,2.jpg]UploadFile/2010-9/20109240145419108.jpg[/upload]

下面个例子为动画的  置于有什么不懂可以去看看我以前的帖子,比如实现动画用的fps
[quote]PINIT()

DIM TICK, TIMER
DIM Y,PAGE1 ''''''''用来举例的
Y=0
TIMER = 0

SETLCD(240,320)

page1 = CREATEPAGE()
SETPEN(PAGE1,1,1,&hffffff)

VASM("MAIN_LOOP:")

VASM("IN [VINT_TICK],15")

FPS = TICK - TIMER

WHILE( FPS >= 30)
flippage(page)
PIXLOCATE(0,0)
PRINT 1000/FPS
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 主要区域
fillpage(page,0,0,240,320,0)
while(a! < 120 + i)
p1 = PPLOAR(100,a!)
p1 = poffset(p1,120,160)
pixel(page,px(p1),py(p1),&hffffff)
deletepoint(p1)
a! = a! +0.5
wend
a! = i
i = i+5
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
FPS = 0
VASM("IN [VINT_TIMER],15")
WEND


IF( KEYPRESS(KEY_ESCAPE)) THEN

VASM("JMP MAIN_LOOP_EXIT:")

END IF

VASM("JMP MAIN_LOOP")'''''''''''''''''''''''''''''''''''来 让我们跳上去

VASM("MAIN_LOOP_EXIT:")''''''''''''''''''''好 就到这里吧!
print "All is well!!!"
WAITKEY()[/quote]

图示:
[upload=gif,3.gif]UploadFile/2010-9/20109240194060185.gif[/upload]

下面这挺复杂的 ,本来是用的数组 但是我被数组打败了,我因此而敲了好多代码 郁闷
[quote]PINIT()

DIM TICK, TIMER
DIM Y,PAGE1 ''''''''用来举例的

dim a1!,a2!,a3!,c1,c2,c3,len1,len2,len3,i1,i2,i3,ic1,ic2,ic3
dim ic1

len0 = 30.0
i0 = -10
ic0! = -20.0'''这个是角度增量
c0 = &h0000ff ''''颜色

len1 = 50.0
i1 = -50
ic1! = 8.0'''这个是角度增量
c1 = &h00ff00 ''''颜色

len2 = 80.0
i1 = 20
ic2! = -6.0 '''这个是角度增量
c2 = &hff0000 ''''颜色

len3 = 110.0
i3 = -10
ic3! = 12.0 '''这个是角度增量
c3 = &h00ffff ''''颜色



'print all(0,0)
'print i,all(2,1)
'waitkey()

Y=0
TIMER = 0

SETLCD(240,320)

page1 = CREATEPAGE()
SETPEN(PAGE1,1,1,&hffffff)

VASM("MAIN_LOOP:")
VASM("IN [VINT_TICK],15")

FPS = TICK - TIMER

WHILE( FPS >= 30)
flippage(page)
fillpage(page,0,0,240,320,0)
PIXLOCATE(0,0)
PRINT 1000/FPS
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 主要区域

a! = i0
i0 = i0+ic0!
while(a! < 120 + i0)
p1 = PPLOAR(len0,a!)
p1 = poffset(p1,120,160)
pixel(page,px(p1),py(p1),c0)
deletepoint(p1)
a! = a! +0.5
wend

a! = i1
i1 = i1+ic1!
while(a! < 120 + i1)
p1 = PPLOAR(len1,a!)
p1 = poffset(p1,120,160)
pixel(page,px(p1),py(p1),c1)
deletepoint(p1)
a! = a! +0.5
wend

a! = i2
i2 = i2+ic2!
while(a! < 120 + i2)
p1 = PPLOAR(len2,a!)
p1 = poffset(p1,120,160)
pixel(page,px(p1),py(p1),c2)
deletepoint(p1)
a! = a! +0.5
wend

a! = i3
i3 = i3+ic3!
while(a! < 120 + i3)
p1 = PPLOAR(len3,a!)
p1 = poffset(p1,120,160)
pixel(page,px(p1),py(p1),c3)
deletepoint(p1)
a! = a! +0.5
wend

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
FPS = 0
VASM("IN [VINT_TIMER],15")
WEND


IF( KEYPRESS(KEY_ESCAPE)) THEN

VASM("JMP MAIN_LOOP_EXIT:")

END IF

VASM("JMP MAIN_LOOP")'''''''''''''''''''''''''''''''''''来 让我们跳上去

VASM("MAIN_LOOP_EXIT:")''''''''''''''''''''好 就到这里吧!
print "All is well!!!"
WAITKEY()
[/quote]
图示:
[upload=gif,4.gif]UploadFile/2010-9/20109240225667393.gif[/upload]

怎么样 效果看起来还不错吧  这个还是挺简单的 在群里看到过我发的那个swf的人都能发现 这个和那个很相似的

这个压缩包里面是这些简单的实例,是国庆前的。
[upload=rar,tie.rar]viewFile.asp?ID=81672[/upload]







[align=right][color=#000066][此贴子已经被作者于2010-10-1 2:57:53编辑过][/color][/align]
发表于2010-09-24 00:46:00
个性签名这个人很懒,什么也没留下!
楼主
沙发
下面的例子基于最新的point类

代码: [quote]PINIT()

DIM TICK, TIMER
DIM Y,PAGE1 ''''''''用来举例的

dim a!,a1!,a2!,a3!,c1,c2,c3,len1,len2,len3,i1,i2,i3,ic1,ic2,ic3,pt,p
dim ic1



l=10

Y=0
TIMER = 0

SETLCD(240,320)

page1 = CREATEPAGE()
SETPEN(PAGE,1,1,&hffffff)
'''''''''''''''''''''''''外部定义域
pt = newPoint(120,200)
a!=0'''''角速度增量
ca!=90.0
alen = 60
p = pploar(alen,ca!)
'''''''''''''''''''''''''''''''''''
VASM("MAIN_LOOP:")
VASM("IN [VINT_TICK],15")

FPS = TICK - TIMER

WHILE( FPS >= 30)
flippage(page)
fillpage(page,0,0,240,320,0)
PIXLOCATE(0,0)
PRINT 1000/FPS
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 主要区域
if(a!)then
ca!= ca!+a!
a!=0
end if

if(ca! >= 360)then
ca!= ca! - 360
end if
if(ca! <= -360)then
ca!= ca! + 360
end if
ptostring(p)
ptostring(pt)
vasm("out 4,10")

vasm("out 5,[vflo_ca]")
preploar(p,alen,ca!)
poffset(p,px(pt),py(pt))
p1 = PINTERPOLATE(pt,p,1.2)

moveto(page,px(p1),py(p1))
lineto(page,px(p),py(p))
deletepoint(p1)

''''''''''''''''''''''''''''''''''''''内控制区域''''''''''


'''''''''''''''''''''''''''''''''''''内控制结束
FPS = 0
VASM("IN [VINT_TIMER],15")
WEND
'''''''''''''''''''''''''''''''''''''''''''''''''''外控制区域
''//================下面是键盘
pen = INKEY()
TX = getpenposx(PEN)
IF( TX > 0) THEN

END IF
''//================下面是触屏
IF( KEYPRESS(KEY_LEFT)) THEN

a!=-10.0

END IF

IF( KEYPRESS(KEY_RIGHT)) THEN

a!=10.0

END IF
'''''''''''''''''''''''''''''''''''''''''''''''''''结束
IF( KEYPRESS(KEY_ESCAPE)) THEN

VASM("JMP MAIN_LOOP_EXIT:")

END IF

VASM("JMP MAIN_LOOP")'''''''''''''''''''''''''''''''''''来 让我们跳上去

VASM("MAIN_LOOP_EXIT:")''''''''''''''''''''好 就到这里吧!
print "All is well!!!"
WAITKEY()
[/quote]
用左右键控制
实现这样的:[upload=gif,1.gif]UploadFile/2010-10/201010113571645595.gif[/upload]
所以也可以实现这样的:
[upload=gif,2.gif]UploadFile/2010-10/201010113574986206.gif[/upload]
代码被弄的不见了 ,只能发图了~还好我先截图了的;
这个是一个时间。

用这个里面的一个函数来实现缓动:

[quote]'''''''''''''''''''''''''外部定义域
p = newPoint(120,200)
pt= newPoint(120,200)



''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 主要区域

ptostring(p)

if(pt)then
p1 = PINTERPOLATE(pt,p,0.7)

preset(p,px(p1),py(p1))
deletepoint(p1)
if(pdistance(pt,p) < 2)then

preset(p,px(pt),py(pt))

end if

end if

circle(page,px(p),py(p),20)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


'''''''''''''''''''''''''''''''''''''''''''''''''''外控制区域
''//================下面是触屏
pen = INKEY()
TX = getpenposx(PEN)
IF( TX > 0) THEN
Ty = getpenposy(PEN)
Preset(pt,TX,ty)
END IF[/quote]

不是给的完整代码
图示如下:
[upload=gif,3.gif]UploadFile/2010-10/20101011413844401.gif[/upload]

缓动是时时刻刻都看的到的 ,在电脑上太多地方都是缓动的,特别是ui稍微好点的东西上面。



这个帖子就算完帖了吧,因为我也不想写了,结果hxw提醒,我觉得还是写点大家能用的实际的,这些东西都很少有人看的,除非有心学bb的人,可以参考下。也可以自己运用

[align=right][color=#000066][此贴子已经被作者于2010-10-1 14:05:03编辑过][/color][/align]
发表于2010-09-30 20:09:00
发表
个性签名这个人很懒,什么也没留下!
2楼

 奇怪,明明是24号的帖子,为什么我现在才看到呢
发表于2010-10-01 00:08:00
发表
个性签名这个人很懒,什么也没留下!
楼主
3楼
回复:(kvxk__120) 奇怪,明明是24号的帖子,为...

 可能他和我有仇吧 每次都审核我的帖子审核半年 这个帖子等我写完了还要申精的!
发表于2010-10-01 02:28:00
发表
个性签名这个人很懒,什么也没留下!
4楼

以下是引用a3160586在2010-10-1 2:28:00的发言:
 可能他和我有仇吧 每次都审核我的帖子审核半年 这个帖子等我写完了还要申精的!


好吧,现在居然又审核。。。才多久的工夫。。。
发表于2010-10-01 03:27:00
发表
个性签名这个人很懒,什么也没留下!
5楼

最好弄个鼠标跟随代码!

支持!

发表于2010-10-02 15:30:00
发表
个性签名这个人很懒,什么也没留下!
楼主
6楼
回复:(hxw438)以下是引用小V仔在2010-10-2 15:30:0...

 晕 啥是鼠标跟随?  就是你点一下他动一下,那叫鼠标跟随?
大汗~~~~~连鼠标移动都没有 何来跟随呢?
发表于2010-10-02 18:29:00
发表
个性签名这个人很懒,什么也没留下!
7楼

前排支持!
发表于2010-10-02 18:59:00
发表
个性签名GrcTEI9tSZ5p3jJ6ehiM
8楼

以下是引用a3160586在2010-10-2 18:29:00的发言:
 晕 啥是鼠标跟随?  就是你点一下他动一下,那叫鼠标跟随?
大汗~~~~~连鼠标移动都没有 何来跟随呢?

发表于2010-10-02 20:59:00
发表
个性签名这个人很懒,什么也没留下!
9楼

这一类精华泛滥了
发表于2010-10-03 16:39:00
发表
个性签名这个人很懒,什么也没留下!
  • 1
  • 2
  • 3
  • 下一页
  • 23回复 共 3页 跳转到 确定