https://github.com/takishita2nd/HokkaidoWar/tree/2021_develop
敵の行動処理をやっていますが、都市を順繰りしているだけで、今は何もしていません。
次はプレイヤーの行動処理の所かなぁ。

https://github.com/takishita2nd/HokkaidoWar/tree/2021_develop
敵の行動処理をやっていますが、都市を順繰りしているだけで、今は何もしていません。
次はプレイヤーの行動処理の所かなぁ。
https://github.com/takishita2nd/FarmGame/tree/develop
本当はトランジション処理を入れたかったんだけど、
なんかエラーで動かない・・・
解決方法がわからないので、とりあえず放置。
(GitHubを覗いてみたけど、ドキュメント・サンプル作成中らしい)
https://github.com/altseed/Altseed2/issues/653
今はトランジションを使わない処理にしておきます。
https://github.com/takishita2nd/HokkaidoWar/tree/2021_develop
都市選択画面を別シーンで作り直しました。
メインのシーンと都市選択を切り分けることで、ロード時とか戦闘後の処理再開が簡単になると思ったので。
https://github.com/takishita2nd/FarmGame/tree/develop
とりあえずボタン全て実装して、共通UI部分をクラス化しました。
次はUIからシーンの切り替えができるようにしたいと思います。
いま素材を集めてます。
Commandパターンのサンプルコードです。
package org.example.command;
public interface Command {
public void execute() throws Exception;
}
package org.example.command;
public class Receiver {
public void action()
{
}
}
package org.example.command;
public class ConcreteCommand implements Command{
@Override
public void execute() throws Exception {
Receiver receiver = new Receiver();
receiver.action();
}
}
package org.example.command;
public class Main {
public static void main(String[] args)
{
Command command = new ConcreteCommand();
try {
command.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
}
CommandパターンはReceiverに対する命令(Command)をオブジェクト化して使用します。
こうすることによって、命令のバッチ処理、履歴保存ができます。
undo/redo処理を実装する場合もこのパターンを適用する場合が多いです。
https://github.com/takishita2nd/FarmGame/tree/develop
ボタンの画像を作成。
ボタンをクラス化して、ボタンの上にマウスを置いたときと、マウスをクリックしたとき、画像を切り替えるようにしました。
次は、下のボタン達は共通している処理なので、ここをまとめて一つのクラスに処理をまとめたいと思います。
それを各シーンで使用して、共通の動作になるようにしたい。
たぶん、シーンの切り替えのみの処理だから。
https://github.com/takishita2nd/HokkaidoWar/tree/2021_develop
そういえば、まだデータのチェックやっていなかったな、と思って、
こんなコードを書きました。
protected override void OnUpdated()
{
asd.Vector2DF pos = asd.Engine.Mouse.Position;
var maps = Singleton.FieldMap.GetAllMaps();
foreach(var map in maps)
{
if(map == null)
{
continue;
}
if(map.IsOnMouse(pos))
{
map.GetCity().PaintAttackColor();
foreach(var linkedMap in map.GetLinkdMap())
{
linkedMap.GetCity().PaintDeffenceColor();
}
break;
}
else
{
map.GetCity().ClearPaint();
}
}
都市間のリンクデータを確認するプログラムです。
こんな感じで確認しました。
まぁ、手ででーたを入力していたわけで、
データミスが一箇所見つかりました。
めんどくさいことだけど、放置するともっとめんどくさいことになるから、めんどくさくてもやらなくちゃ行けないのです。
https://github.com/takishita2nd/FarmGame
とりあえず、ボタンを配置してみた。
ボタンは下記リンク先のフリー素材を使用しています。
https://kopacurve.blog.fc2.com
ボタン+テキスト配置で作成したけど、たぶん、文字の入ったボタンを作った方が良いような気がする。
位置合わせがめんどくさい。
あ、そうそう、今回はAltseed2を使用しています。
.NEt Coreで動作するゲーム用ライブラリです。
とりあえず、こんなものをサクッと考えてみた。
こんな感じで、着手開始します。
https://github.com/takishita2nd/cocos2d-x_sample
こんなかんじになりました。
今回はスクロール処理にもう少し手を加えて、
スクロールしすぎないようにストッパ処理を追加しました。
if(questListMenu.isShow)
{
// Yの差分だけメニューを動かす
float divY = touch->getLocation().y - keepPosition.y;
auto visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
if(questListMenu.questListMenu[0].parts.point.y - questListMenu.questListMenu[0].parts.size.height + divY < visibleSize.height)
{
for(int i = 0; i < QUEST_NUM; i++)
{
questListMenu.questListMenu[i].parts.point = Vec2(questListMenu.parts.point.x, questListMenu.parts.point.y - questListMenu.questListMenu->parts.sprite->getContentSize().height * (i + 1));
questListMenu.questListMenu[i].parts.sprite->setPosition(questListMenu.questListMenu[i].parts.point);
questListMenu.questListMenu[i].questName.point = Vec2(questListMenu.questListMenu[i].parts.point.x + questListMenu.questListMenu[i].parts.size.width / 30.0, questListMenu.questListMenu[i].parts.point.y);
questListMenu.questListMenu[i].questName.label->setPosition(questListMenu.questListMenu[i].questName.point);
}
}
else if(questListMenu.questListMenu[QUEST_NUM - 1].parts.point.y + divY >= origin.y)
{
int listcount = 0;
for(int i = QUEST_NUM - 1; i <= 0; i--)
{
questListMenu.questListMenu[QUEST_NUM - 1].parts.sprite->setPosition(questListMenu.questListMenu[i].parts.point.x, questListMenu.questListMenu[0].parts.point.y * listcount + origin.y);
questListMenu.questListMenu[QUEST_NUM - 1].parts.point.y = questListMenu.questListMenu[0].parts.point.y * listcount + origin.y;
questListMenu.questListMenu[QUEST_NUM - 1].questName.label->setPosition(questListMenu.questListMenu[i].questName.point.x, questListMenu.questListMenu[0].parts.point.y * listcount + origin.y);
questListMenu.questListMenu[QUEST_NUM - 1].questName.point.y = questListMenu.questListMenu[0].parts.point.y * listcount + origin.y;
listcount++;
}
}
else
{
for(int i = 0; i < QUEST_NUM; i++)
{
questListMenu.questListMenu[i].parts.sprite->setPosition(questListMenu.questListMenu[i].parts.point.x, questListMenu.questListMenu[i].parts.point.y + divY);
questListMenu.questListMenu[i].parts.point.y = questListMenu.questListMenu[i].parts.point.y + divY;
questListMenu.questListMenu[i].questName.label->setPosition(questListMenu.questListMenu[i].questName.point.x, questListMenu.questListMenu[i].questName.point.y + divY);
questListMenu.questListMenu[i].questName.point.y = questListMenu.questListMenu[i].questName.point.y + divY;
}
}
keepPosition.y += divY;
}
考え方としては、
リストの先頭が画面上部のサイズから下に移動しそうなときは初期位置に設定する、
リストの最後が画面の下から上にいs¥どうしそうなときは下からリストを並べる、
といった感じです。
じゃあ、次はタップで選択処理だな。