Nintendo DSi SDK:Начало

Ниже приведена демонстрация двух окон (этапов), использующих одну и ту же модель.
Демонстрация максимально проста: в одном окне отображается список. Второе окно динамически отображает элементы, которые были выбраны в первом:

enter image description here

Совместно используемая модель содержит информацию, которая нужна двум окнам. В основном список элементов и список выбранных элементов:

package two_windows;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

public class Model {

    private final ObservableList list;
    private ObservableList selected;

    Model(){
        list = FXCollections.observableArrayList();
    }

    void addMessage(String msg){
        list.add(msg);
    }

    ObservableList getMessages(){
        return list;
    }

    ObservableList getSelectedMessages(){
        return selected;
    }

    void setSelected(ObservableList selected) {
        this.selected = selected;
    }
}

Содержимое первого окна определяется List.fxml и его контроллером:







   
        
    

Контроллер принимает Model, устанавливает список выбранных элементов в модели, слушает и реагирует на изменения модели:

package two_windows;

import java.util.List;
import javafx.collections.ListChangeListener;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;

public class ListController {

    @FXML ListView list;

    void setModel(Model model) {

        list.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);//allow multiple selection

        //sets the selected items of the list to the model 
        model.setSelected(list.getSelectionModel().getSelectedItems());

        //listen to changes in model, and respond
        model.getMessages().addListener(
                                        (ListChangeListener) c -> {
                                            c.next();
                                            addElements(c.getAddedSubList());
                                        }
                                    );
    }

    private void addElements(List msgList){

        for(String msg : msgList){
            list.getItems().add(msg);
        }
    }
}

Содержимое второго окна очень похоже на первое, и определяется Selected.fxml :




  


   
        
    

И его контроллер, который, как и другой контроллер, принимает Model и реагирует на изменения в нем:

package two_windows;

import java.util.List;
import javafx.collections.ListChangeListener;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;

public class SelectedController {

    @FXML ListView selected;

    void setModel(Model model) {

        //listen to changes in model, and respond
        model.getSelectedMessages().addListener(
                    (ListChangeListener) c -> {
                        c.next();
                        removeElements(c.getRemoved());
                        addElements(c.getAddedSubList());
                    }
                );
    }

    private void removeElements(List msgList){

        for(String msg : msgList){
            selected.getItems().remove(msg);
        }
    }

    private void addElements(List msgList){

        for(String msg : msgList){
            selected.getItems().add(msg);
        }
    }
}

[ 1118] Собираем все вместе и тестируем:

package two_windows;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class TwoWindows extends Application {

    private Model model;

    @Override
    public void start(Stage primaryStage) throws Exception{

        model = new Model();

        FXMLLoader listLoader = new FXMLLoader(getClass().getResource("List.fxml"));
        Parent list = listLoader.load();
        ListController listController = listLoader.getController();
        listController.setModel(model);

        FXMLLoader selectedLoader = new FXMLLoader(getClass().getResource("Selected.fxml"));
        Parent selected = selectedLoader.load();
        SelectedController selectedController = selectedLoader.getController();
        selectedController.setModel(model);

        primaryStage.setScene(new Scene(list));
        primaryStage.setX(350); primaryStage.setY(300);

        Stage secondaryStage = new Stage();
        secondaryStage.setScene(new Scene(selected));
        secondaryStage.setX(550); secondaryStage.setY(300);

        addMessages();
        primaryStage.show();
        secondaryStage.show();
    }

    private void addMessages() {

        int counter = 0;
        while(counter < 15) {
            model.addMessage("message number "+ counter++);
        }
    }

    public static void main(final String[] args) {
        launch(args);
    }
}

8
задан Hugoware 19 February 2009 в 17:43
поделиться

3 ответа

Насколько я знаю, единственный законный способ получить комплект разработчика DS/DSi Nintendo состоит в том, чтобы получить его прямо от Nintendo - требование, чтобы Вы имели много денег и предпочтительно контракта со знаком с крупным игровым издателем. Дело обстоит так со всеми главными игровыми приставками, за возможным исключением Xbox 360 и платформы XNA. Я не предвижу их изменяющий их бизнес-модель скоро; управление SDK гарантирует, что производители оборудования получат свое сокращение прибыли для любой игры, это выпущено для их консоли.

Если требуется понять то, на что похоже программирование DS, существуют некоторые "неофициальные" (чтение: взломанные и повреждающиеся лицензионные соглашения) домашнее пиво среды программирования DS. Google Searching для "Домашнего пива DS", вероятно, поднимет большую информацию.

Если это имеет значение большая часть разработки для игровых приставок, включенный DS, сделана в C или C++.

12
ответ дан 5 December 2019 в 07:37
поделиться

Если Вы хотите начать теперь. Захватите 'доморощенную' корзину DS; M3, Acekard, Cyclowiz, R4 и т.д.

Проверяя теперь, Acekard (http://www.acekard.com/) уже имеют совместимую карту DSi. Я уверен, что уже существуют другие. Технически нет никакого изменения между DS и DSi для (полностью совместимых) картриджей Слота 1, все дополнительные функции связаны с камерой, возможностью соединения и способностью работать от SD-карты.

Для большего количества информации о части Dev проверьте форумы; http://desmume.org, который Они также имеют (поскольку имя предлагает), эмулятор DS для загрузки.

Премия: На основе прошлой записи откроется случайная Nintendo, NDi для dev не является тонким ни к одному. Я думаю, что был разговор об этом на Wii через WiiWare, но не было ничего нового на той области в течение долгого времени. Просто выпуски от знать/устанавливать компании.

7
ответ дан 5 December 2019 в 07:37
поделиться

Я пытался разработать на DS некоторое время назад. Из того, что я помню, DevKitPro имел библиотеку ARM, которой Вы могли пользоваться. Я работал главным образом с Func-C, но C++ поддерживается. Технически, я думаю, что можно программировать на чем-либо, что имеет компилятор для архитектуры ARM.

Я надеюсь входить в него снова, когда DSi запускается в Канаде. Быстрый процессор, персистентное устройство хранения данных и больше памяти должны произвести некоторое сладкое домашнее пиво.

3
ответ дан 5 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: