Ashley过时/无法更新(Family.all()不存在)

时间:2015-02-04 04:13:55

标签: java intellij-idea libgdx

我正在努力让Ashley运转起来,但我遇到了一个问题。我尝试调用Family.all(),但IntelliJ IDEA 14向我保证无法访问此函数。这是我正在尝试运行它的系统:

package com.mygdx.game.Systems;

import com.badlogic.ashley.core.*;
import com.badlogic.ashley.utils.ImmutableArray;
import com.mygdx.game.Components.PositionComponent;
import com.mygdx.game.Components.VelocityComponent;

import javax.management.ImmutableDescriptor;

public class MovementSystem extends EntitySystem {
    private ImmutableArray<Entity> entities;

    private ComponentMapper<PositionComponent> pm = ComponentMapper.getFor(PositionComponent.class);
    private ComponentMapper<VelocityComponent> vm = ComponentMapper.getFor(VelocityComponent.class);

    public MovementSystem() {}

    public void addedToEngine(Engine engine) {
        entities = engine.getEntitiesFor(Family.all(PositionComponent.class, VelocityComponent.class).get());
    }

    public void update(float deltaTime) {
        for (int i = 0; i < entities.size(); ++i) {
            Entity entity = entities.get(i);
            PositionComponent position = pm.get(entity);
            VelocityComponent velocity = vm.get(entity);

            position.x += velocity.x * deltaTime;
            position.y += velocity.y * deltaTime;
        }
    }
}

这是build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
    }
}

allprojects {
    apply plugin: "eclipse"
    apply plugin: "idea"

    version = '1.0'
    ext {
        appName = 'SomeApp'
        gdxVersion = '1.4.1'
        roboVMVersion = '1.0.0-alpha-04'
        box2DLightsVersion = '1.3'
        ashleyVersion = '1.3.2'
        aiVersion = '1.4.0'
    }

    repositories {
        mavenCentral()
        maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
        maven { url "https://oss.sonatype.org/content/repositories/releases/" }
    }
}

project(":desktop") {
    apply plugin: "java"


    dependencies {
        compile project(":core")
        compile "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
        compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
        compile "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop"
        compile "com.badlogicgames.gdx:gdx-controllers-desktop:$gdxVersion"
        compile "com.badlogicgames.gdx:gdx-controllers-platform:$gdxVersion:natives-desktop"
        compile "com.badlogicgames.gdx:gdx-ai:$aiVersion"
    }
}

project(":core") {
    apply plugin: "java"


    dependencies {
        compile "com.badlogicgames.gdx:gdx:$gdxVersion"
        compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
        compile "com.badlogicgames.box2dlights:box2dlights:$box2DLightsVersion"
        compile "com.badlogicgames.ashley:ashley:$ashleyVersion"
        compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion"
        compile "com.badlogicgames.gdx:gdx-ai:$aiVersion"
    }
}

tasks.eclipse.doLast {
    delete ".project"
}

我特别提到的错误是“所有人都有私人访问权限”。自动完成的唯一事情告诉我,我可以从Family类访问“getFor()”。到目前为止,引擎,实体等工作顺利进行。我正在运行JDK 7作为我机器上安装的JDK,以及作为Intellij中的兼容模式。

我从git自述文件中获取了所有代码,并按照保险说明将Ashley作为依赖项构建,尽管我在第一次创建项目时也将其包含在内。

我尝试了不同版本的Ashley(我认为),我尝试改变Intellij中的JDK兼容性,到目前为止还没有。我完全被这里难过了,我感谢任何帮助。

编辑:最近“全部”功能被添加到Family类中,所以我可以推测的最好的是尽管将Ashlety 1.3.2作为依赖项推进,但在添加构建器模式之前它仍然使用旧版本的Ashley到家庭班。问题似乎是Gradle没有使用最新版本的Ashley。这让我更接近,但我仍然无法弄清楚如何解决它。我已按照安装说明进行操作。

2 个答案:

答案 0 :(得分:2)

好吧,我终于在处理不相关的事情时弄明白了。我注意到一个XML文件引用了Ashley 1.0.1,它在将all()函数添加到Family类之前是WAY。我不知道这个XML文件是否会导致这个问题,但是这让我想起在某个时候我在File&gt; Project Structure中看到了一个“依赖关系”选项卡。

所以我去了那里,点击了“核心”,当我看到时,我注意到尽管我的build.gradle告诉我,该项目仍在引用Ashley 1.0.1或其他一些旧版本。所以我删除了过时的Ashley版本,点击Add按钮(alt + insert),点击Library,然后点击New Library,然后点击From Maven。

从那里,您可以与搜索栏进行对话,只需键入“ashley”,它就会显示您使用gradle脚本下载的Ashley版本列表。版本1.3.2是你正在寻找的(1.3.3给了我一个错误,我不想解决方法,考虑到文档建议1.3.2无论如何)。如果在搜索上单击“确定”后没有显示,请确保将该版本号添加到build.gradle并运行依赖项构建。

在那之后,你只需点击,申请等,然后离开。从那里,Family.all()工作!和Ashley更新了最新版本。希望这个答案可以帮助其他人,即使它只适用于Intellij(并且Eclipse似乎更受欢迎),因为我试图弄清楚我的头发,并且那里没有很多信息。

答案 1 :(得分:0)

首先根据ashley's java api doc Family.all(PositionComponent.class,VelocityComponent.class).get()不能直接实例化族,但必须通过构建器访问(从Family.all()开始,Family.one( )或Family.exclude()),这是为了避免描述相同组件的重复族。

Ashleys Family Class Source Code from the GitHub for your reference