我正处于一个开发人员团队的巨大应用程序中,内存是早期需要考虑的事情.当我按原样运行程序时,它需要大约44 MB的内存(从任务管理器中找到).然后我创造了10,000个身体.内存使用量现在约为83 MB.当我点击空格时,我有一种破坏物体的方法,这就是它的外观.
public static void disposeAllBodies(){
Array<Body> bodies = new Array<Body>();
world.getBodies(bodies);
int destroyCount = 0;
System.out.println("Attempting to destroy " + world.getBodyCount()+ " bodies");
for(Body b : bodies){
world.destroyBody(b);
destroyCount++;
}
System.out.println("Successfully destroyed " + destroyCount + " body(s), " + world.getBodyCount() + " remain");
}
Run Code Online (Sandbox Code Playgroud)
它处理所有的主体没有问题,这些是应用程序中唯一的东西.处理完毕后,内存会下降到大约66MB几秒钟,然后跳到78 MB并停留在那里.
所以我想知道是否有更好的方法处理这些尸体?这个应用程序将创建数百万个主体,但大多数将被销毁,但是如果内存不断上升,它将无法处理这么多处理因为内存保持非常静态.
此外,CPU从0.2%(在任何机构之前)变为23%(当存在10,000个机构时)然后变为2.3%(当处置机构时).因此,即使CPU在处理完尸体后也会做更多的工作.
谢谢你的帮助!
更新:创建主体的代码如下:
BodyDef bodyDef = new BodyDef();
bodyDef.type = type;
bodyDef.position.set(new Vector2(position.x, position.y));
Body body = world.createBody(bodyDef);
FixtureDef fixtureDef = new FixtureDef();
Fixture fixture;
if(isCircle){
CircleShape circle = …Run Code Online (Sandbox Code Playgroud) 我试图在维基百科的弹出窗口中删除链接的名称.因此,当您在维基百科中悬停链接时,它会从该链接的介绍中显示一些小片段.我需要抓取这些信息,但我不确定它在源头中的位置.当我检查元素时(因为它弹出)这是html(对于这个例子,我将鼠标悬停在链接"希腊语"上)
<a dir="ltr" lang="en" class="mwe-popups-extract" href="/wiki/Ancient_Greek">
<p>The <b>Ancient Greek</b> language includes the forms of Greek...(a bunch more text)...</p></a>
Run Code Online (Sandbox Code Playgroud)
我需要提取的是href ="/ wiki/Ancient_Greek"但是当我没有悬停链接时,这段html消失了.有没有办法(用BS4和python)用我正在抓取的源html提取这些信息?
编辑:我无法承担额外的网页调用,因为项目需要很长时间才能运行.如果无论如何都要改变我检索源的方式,这样我就可以获得有用的弹出信息.这个项目非常庞大,获取此弹出信息至关重要.
任何不需要完全重建项目的建议都非常感激 - 我正在使用urllib来获取源(带请求)和bs4来完成.
我正在使用pool.map来填充字典 - 称为节点.要明确:在pool.map运行之后填充此字典,因此在进程之间共享变量不是一个问题.函数返回的所有内容以及字典中的所有内容都是可选的.它填充了一个基本上是图形的字典.当我进入填充此图表的1,2,3深度时,程序运行完美无缺.然而在4深:程序似乎没有崩溃,只是冻结.我在映射到的函数中设置了print语句,在运行的最后,它在程序的最顶部打印语句,然后冻结.这是我如何调用pool.map:
currentNode = startingNode
nodesPopulated = [currentNode]
connections = []
merger = []
pool = Pool(cpu_count())
for currentDepth in range(1, depth):
print('=' * 70)
print("= At depth", currentDepth)
connections = []
for item in nodesPopulated:
if item != None:
if item.isPopulated():
connections +=list(item.getConnections().values())
print("= Current number of connections:",len(connections))
print("= Current number of NodesPopulated in this iteration: ",len(nodesPopulated))
print("= Total number of nodes",len(self.nodes.keys()))
nodesPopulated = pool.map(self.populateTopicNode, connections)
print('\n= Successfully populated another round of nodes')
for node in nodesPopulated:
if …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何Texture使用Java 翻转libgdx.我找不到任何这样做的方法,我不能只是做一些代码来翻转Texture自己.有没有什么方法可以在libgdx中以某种方式翻转纹理?
我正在尝试为Unity制作一个游戏场景.但是,我似乎无法摆脱这种边界.或者我似乎无法伸展我的背景以适应整个屏幕.我需要这种缩放才能适用于所有屏幕尺寸.这是正在发生的事情的图像.
当我不希望这种情况发生时,你可以清楚地看到蓝色边缘.当我在平板电脑上测试时也会发生这种情况.相机尺寸为5,但是,当我进行一些调试时,我注意到当我触摸屏幕时它给了我诸如7.15的位置.我怎样才能缩减一切,我搜索了大量的论坛,似乎没有人遇到这个问题.提前致谢!
我想改变底壁的位置。底壁是用于碰撞的3D立方体。这是多维数据集和属性的图片。
在图像的右侧,您可以看到一个名为transform的属性栏。我想通过脚本访问它并更改位置。这是我尝试使用的代码。
void Start () {
GameObject bottomWall = GameObject.Find("Bottom");
Bottom bottomScript = bottomWall.GetComponent<Bottom>();
bottomScript.wallPos.y = -Camera.main.orthographicSize * 1000;
bottomWall.transform.position.Set(1000, 100, 1000);
bottomWall.GetComponent<Transform>().position.Set(100, 100, 100);
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,什么也没有发生。我似乎做不到,对此非常有帮助。
我有两个用Paddle's渲染SpriteRenderer.他们已经BoxCollider附着在他们身上,他们工作得很好.但是,它们无法使用不同的分辨率正确缩放.所以我转而Image在画布上使用's.它们完美地扩展.但是,我似乎无法BoxCollider正确地使用Paddle's'.我搜索了互联网并找到了一些解决方案,但他们完全错了.根据我所看到的大部分内容,我得出了以下结论:
GetComponent<BoxCollider2D>().size = gameObject.GetComponent<RectTransform>().sizeDelta;
Run Code Online (Sandbox Code Playgroud)
这根本不起作用.
这是我需要的图像,以防它不清楚.
绿色框是该图像中的正确尺寸,但这不是发生的事情,这就是我需要发生的事情.
所以,基本上我需要一种方法来缩放BoxCollider2D到的大小Image的Canvas.
下面是检查人员的图像Paddle和Canvas(注:Paddle有剧本,我就剪下来,因为它没有工作,反正):
还要注意:我需要对撞机的原因是因为我正在检查两个GameObjects,球和桨之间的碰撞.这是乒乓球.
我被迫在我的 android 手机上测试输入。我的一切都运行得很完美等等。但是我看不到我的日志来帮助我调试它。这是我尝试调试它的代码。
string side = "not touched";
if (Input.touchCount > 0)
{
if (Input.touchCount <= 1)
{
myTouch = Input.GetTouch(0);
touchPos = Camera.main.ScreenToWorldPoint(myTouch.position);
}
if (touchPos.x < Camera.main.orthographicSize)
{
side = "Left side touched";
//Begin Section: Touch left side
if (touchPos.y > 0)
{
side += ": Top";
yPos = gameObject.transform.position.y + (paddleSpeed * Time.deltaTime);
}
else
{
side += ": Bottom";
yPos = gameObject.transform.position.y - (paddleSpeed * Time.deltaTime);
}
//End of section
}
Debug.Log(side);
}
Run Code Online (Sandbox Code Playgroud)
我所做的只是看看我是否触摸了顶部或底部的左侧。我使用了 debug.Log(); 但我看不到它显示的内容,因为我必须在 …