winform编译android,拋物線之winform與android的實現
发布日期:2021-06-24 12:34:48 浏览次数:2 分类:技术文章

本文共 2999 字,大约阅读时间需要 9 分钟。

package com.yarin.android.Examples_05_04;

import java.util.HashSet;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.List;

import java.util.Set;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Rect;

import android.util.Log;

import android.view.KeyEvent;

import android.view.MotionEvent;

import android.view.View;

import android.widget.Toast;

public

class

GameView extends View implements Runnable

{

/*

聲明Paint對象

*/

private

Paint mPaint

=

null

;

double

maxS

=

0

;

double

maxH

=

0

;

double

maxT

=

0

;

double

dx;

double

dy;

double

d;

MovingObject obj;

boolean isDraw

=

false

;

public

GameView(Context context)

{

super(context);

/*

構建對象

*/

mPaint

=

new

Paint();

//

計算物體的最大高度、運動時間及最大射程

obj

=

new

MovingObject(

30

, Math.PI

/

4

, Color.RED);

//

運行時間

obj.T

=

2

*

obj.V0

*

Math.sin(obj.Sita)

/

9.8

;

//

最大高度

obj.H

=

obj.V0

*

obj.V0

*

Math.sin(obj.Sita)

*

Math.sin(obj.Sita)

/

(

2

*

9.8

);

//

最大射程

obj.Smax

=

2

*

obj.V0

*

obj.V0

*

Math.sin(obj.Sita)

*

Math.cos(obj.Sita)

/

9.8

;

if

(obj.Smax

>

maxS)

{

maxS

=

obj.Smax;

}

if

(obj.H

>

maxH)

{

maxH

=

obj.H;

}

if

(obj.T

>

maxT)

{

maxT

=

obj.T;

}

dx

=

(

800

-

20

)

/

maxS;

dy

=

(

480

-

20

)

/

maxH;

d

=

Math.min(dx, dy);

//

最大運行時間

Log.v(

"

TAG

"

, String.valueOf(maxT));

//

最大高度

Log.v(

"

TAG

"

, String.valueOf(maxH));

//

最大射程

Log.v(

"

TAG

"

, String.valueOf(maxS));

}

public

void

onDraw(Canvas canvas)

{

super.onDraw(canvas);

/*

設置畫布的顏色

*/

canvas.drawColor(Color.BLACK);

/*

設置取消鋸齒效果

*/

mPaint.setAntiAlias(

true

);

canvas.drawColor(Color.GREEN);

if

(isDraw)

{

canvas.drawCircle((

float

)obj.X, (

float

)obj.Y,

10

, mPaint);

}

}

//

觸筆事件

public

boolean onTouchEvent(MotionEvent

event

)

{

switch

(

event

.getAction())

{

case

MotionEvent.ACTION_DOWN:

new

Thread(

this

).start();

break

;

}

return

true

;

}

public

void

run()

{

for

(

double

t

=

0

; t

<

maxT; t

+=

0.01

)

{

Log.v(

"

TAG

"

, String.valueOf(t));

isDraw

=

true

;

//

水平坐標

double

x

=

obj.V0

*

Math.cos(obj.Sita)

*

t;

//

豎直坐標

double

y

=

obj.V0

*

Math.sin(obj.Sita)

*

t

-

9.8

*

t

*

t

/

2

;

if

(y

<

0

)

{

continue

;

}

//

坐標轉換

obj.X

=

10

+

d

*

x;

obj.Y

=

480

-

10

-

d

*

y;

try

{

Thread.sleep(

10

);

}

catch

(InterruptedException e)

{

Thread.currentThread().interrupt();

}

//

使用postInvalidate可以直接在線程中更新界面

postInvalidate();

}

}

}

class

MovingObject

{

//

重力加速度

public

final

double

G

=

9.8

;

//

/

//

/ 構造函數

//

/

//

/ V0物體的初速度

//

/ Sita物體初速度與水平方向的夾角

//

/ Color顏色

public

MovingObject(

double

V0,

double

Sita,

int

red)

{

this

.V0

=

V0;

this

.Sita

=

Sita;

this

.Color

=

red;

}

//

/

//

/ 物體的初速度

//

/

public

double

V0;

//

/

//

/ 物體初速度與水平方向的夾角

//

/

public

double

Sita;

//

/

//

/ 物體的橫坐標

//

/

public

double

X;

//

/

//

/ 物體的縱坐標

//

/

public

double

Y;

//

物體的顏色

public

int

Color;

//

要繪制的物體的矩形

public

Rect GetObjectRectangle()

{

return

new

Rect((

int

) X

-

3

, (

int

) Y

-

3

,

6

,

6

);

}

//

/

//

/ 最大射程

//

/

public

double

Smax;

//

/

//

/ 最大高度

//

/

public

double

H;

//

/

//

/ 運行時間

//

/

public

double

T;

}

转载地址:https://blog.csdn.net/weixin_32767591/article/details/117522862 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:android camera噪点,android位图上的噪点效果
下一篇:android点击屏幕中间播放,android上,实现直接在屏幕上显示点击位置,方便调试。...

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月14日 10时13分22秒