gpt4 book ai didi

java - 本地方法调用与对象方法调用

转载 作者:行者123 更新时间:2023-12-02 07:36:21 25 4
gpt4 key购买 nike

如果这是重复的并且我的谷歌功能较弱,请道歉。

我的代码中有两个方法路由选项:

使用调用一堆对象属性的本地方法:

/* public class Manager */
public void onTouchEvent( Event event )
{
Vec2 touch = new Vec2( event.getX(), event.getY() );
for( GameObject o : mGameObjectList )
{
if ( isColliding( touch, o ) )
o.onTouchEvent(event);
}
}

public boolean isColliding( Vec2 touch, GameObject obj )
{
if ( ( obj.mPosition[ 0 ] - obj.mScale[ 0 ] ) < touch.x && touch.x < ( obj.mPosition[ 0 ] + obj.mScale[ 0 ] ) )
{
if ( ( obj.mPosition[ 1 ] - obj.mScale[ 1 ] ) < touch.y && touch.y < ( obj.mPosition[ 1 ] + obj.mScale[ 1 ] ) )
{
return true;
}
}

return false;
}

调用一个对象方法,然后使用本地属性:

/* public class Manager */
public void onTouchEvent( Event event )
{
for( GameObject o : mGameObjectList )
{
o.isColliding(event);
}
}

/* public class GameObject */
public boolean isColliding( Event event )
{
// code here to get touch from event ( or maybe pass in touch? )

if ( ( mPosition[ 0 ] - mScale[ 0 ] ) < touch.x && touch.x < mPosition[ 0 ] + ( mScale[ 0 ] ) )
{
if ( ( mPosition[ 1 ] - mScale[ 1 ] ) < touch.y && touch.y < mPosition[ 1 ] + ( mScale[ 1 ] ) )
{
onTouchEvent(event)
}
}

return false;
}

哪一组方法在编程上会更好(最优、优雅、简单等)?

更新:修复了代码部分。对此,我深表歉意。

最佳答案

我会用 GameObject::containsPoint(x, y) 方法来编写它。这样,它不需要知道触摸事件,但您的触摸类也不需要知道计算交集。

编辑:

这就是我的做法。

/* class GameObject */
public boolean contains(int x, int y)
{
//Your use of parentheses here was really confusing!
return mPosition[0] - mScale[0] < x && x < mPosition[0] + mScale[0]
&& mPosition[1] - mScale[1] < y && y < mPosition[1] + mScale[1];

/* alternatively:
return Math.abs(x - mPosition[0]) < mScale[0]
&& Math.abs(y - mPosition[1]) < mScale[1];
*/
}

/* class Manager */
public void onTouchEvent( Event event )
{
for( GameObject o : mGameObjectList )
{
if(o.contains(event.getX(), event.getY()))
{
o.onTouchEvent(event);
}
}
}

我不确定到 Vec2 的转换是否高效(或一致)。为什么触摸点提升为 Vec2,而 GameObject::mPosition 是一个数组?

关于java - 本地方法调用与对象方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12184204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com